Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop Spark:使用textFile';什么是分区选项?_Hadoop_Apache Spark - Fatal编程技术网

Hadoop Spark:使用textFile';什么是分区选项?

Hadoop Spark:使用textFile';什么是分区选项?,hadoop,apache-spark,Hadoop,Apache Spark,我正在通过类似于sc.textFile(“/data/*/*/*/*”)的方式将数以万计的文件读入rdd。一个问题是,这些文件中的大多数都很小,而其他文件则很大。这会导致任务不平衡,导致各种众所周知的问题 我是否可以通过sc.textFile(“/data/*/*/*”,minPartitions=n_files*5)读取数据来分解最大的分区,其中n_files是输入文件的数量 与stackoverflow上的转换一样,minPartitions通过hadoop rabit漏洞传递,并用于org

我正在通过类似于
sc.textFile(“/data/*/*/*/*”)
的方式将数以万计的文件读入rdd。一个问题是,这些文件中的大多数都很小,而其他文件则很大。这会导致任务不平衡,导致各种众所周知的问题

我是否可以通过
sc.textFile(“/data/*/*/*”,minPartitions=n_files*5)
读取数据来分解最大的分区,其中
n_files
是输入文件的数量

与stackoverflow上的转换一样,
minPartitions
通过hadoop rabit漏洞传递,并用于
org.apache.hadoop.mapred.TextInputFormat.getSplits
。我的问题是,这是否实现为首先拆分最大的文件。换句话说,拆分策略是一种试图导致分区大小均匀的策略吗


我更喜欢一个答案,指出在spark/hadoop的最新版本中,分裂策略实际在哪里实施。

没有人给出答案,所以我自己深入研究了这个问题,并将发布我自己问题的答案:

似乎,如果您的输入文件是可拆分的,
textFile
确实会尝试平衡分区大小,如果您使用minPartitions选项

分区策略是在
org.apache.hadoop.mapred.TextInputFormat
getSplits
方法中实现的。此分区策略很复杂,首先设置
goalSize
,这是输入的总大小除以
numSplits
minPartitions
向下传递以设置
numSplits
的值)。然后,它以这样一种方式拆分文件,即尝试确保每个分区的大小(就其输入的字节大小而言)尽可能接近目标大小/

如果输入文件不可拆分,则不会进行此拆分:请参阅源代码