并行化Spark中外部文件所需的RDD变量

时间:2016-05-19 11:10:38

标签: scala apache-spark

根据我阅读的材料和一些在线帖子,我认为Spark将通过以下方式从外部文件广播所有RDD变量:sc.textFile,例如:

val rdd = sc.textFile(file_path)

然而,当我的同事阅读我的代码并请求代码sc.parallelize时,我对此感到困惑,因为我认为sc.parallelize是多余的,我再次问我的同事他给了我一个回答:

根据我迄今为止的经验,spark并不擅长处理多个节点和工作人员的外部文件的分歧,因此您需要设置分区,迫使工作人员应用多个工作人员来完成工作。

基于我的同事的建议,如果sc.textFile无法做到这一点,那么在我阅读大量文件时,我可以设置分区的最简单方法是什么。一种可能的方法是首先collect然后sc.parallelize,但我认为它浪费了太多时间而且是多余的。

1 个答案:

答案 0 :(得分:0)

您可以拨打rdd.repartion(..)。收集和并行不是实现你所描述的正确方法。

您的同事观察到此行为的原因可能是由于文件较小,因为分区是由HDFS块在读取时驱动的。因此,如果文件小于块大小,则所有数据都将在同一个执行程序中结束。