如何在Spark中拆分输入数据?

时间:2015-08-05 18:26:37

标签: apache-spark

我来自Hadoop背景,在hadoop中,如果我们有一个包含大量小文件的输入目录,每个mapper任务每次选择一个文件并对单个文件进行操作(我们可以更改此行为并且每个mapper选择多个文件,但这不是默认行为)。我想知道它在Spark中是如何工作的?每个spark任务是逐个选择文件还是..?

1 个答案:

答案 0 :(得分:1)

Spark的行为方式与Hadoop使用HDFS的方式相同,事实上Spark使用相同的Hadoop InputFormats来读取HDFS中的数据。

但你的陈述是错误的。只有当每个文件小于块大小或者所有文件都是文本并使用不可拆分压缩进行压缩(如gzip压缩的CSV文件)时,Hadoop才会逐个获取文件。

所以Spark会做同样的事情,对于每个小输入文件,它会创建一个单独的"分区"对数据执行的第一个阶段将具有与输入文件数量相同的任务量。这就是为什么对于小文件,建议使用wholeTextFiles函数,因为它会创建更少的分区