分区数如何影响`wholeTextFiles`和`textFiles`?

时间:2015-11-25 00:40:55

标签: python apache-spark pyspark

在火花中,我了解如何使用wholeTextFilestextFiles,但我不确定在何时使用。这是我目前所知道的:

  • 处理未按行分割的文件时,应使用wholeTextFiles,否则请使用textFiles

我认为默认情况下,wholeTextFilestextFiles分别按文件内容和行分区。但是,它们都允许您更改参数minPartitions

那么,更改分区会如何影响这些分区的处理方式?

例如,假设我有一个包含100行的非常大的文件。将它作为wholeTextFiles与100个分区处理,并使用默认的分区100将其作为textFile(逐行分区)处理它之间有什么区别。

这些有什么区别?

1 个答案:

答案 0 :(得分:5)

作为参考,wholeTextFiles使用扩展CombineFileInputFormatWholeTextFileInputFormat

关于wholeTextFiles的几点说明。

  • wholeTextFiles返回的RDD中的每条记录都有文件名和文件的全部内容。这意味着无法拆分文件(根本无法)。
  • 因为它扩展了CombineFileInputFormat,它会尝试将较小的文件组合并到一个分区中。

如果目录中有两个小文件,则两个文件可能最终都在一个分区中。如果我设置minPartitions=2,那么我可能会返回两个分区。

现在,如果我要设置minPartitions=3,我仍会返回两个分区,因为wholeTextFiles的合同是RDD中的每条记录都包含整个文件。