在火花中,我了解如何使用wholeTextFiles
和textFiles
,但我不确定在何时使用。这是我目前所知道的:
wholeTextFiles
,否则请使用textFiles
。 我认为默认情况下,wholeTextFiles
和textFiles
分别按文件内容和行分区。但是,它们都允许您更改参数minPartitions
。
那么,更改分区会如何影响这些分区的处理方式?
例如,假设我有一个包含100行的非常大的文件。将它作为wholeTextFiles
与100个分区处理,并使用默认的分区100将其作为textFile
(逐行分区)处理它之间有什么区别。
这些有什么区别?
答案 0 :(得分:5)
作为参考,wholeTextFiles
使用扩展CombineFileInputFormat的WholeTextFileInputFormat
。
关于wholeTextFiles
的几点说明。
wholeTextFiles
返回的RDD中的每条记录都有文件名和文件的全部内容。这意味着无法拆分文件(根本无法)。CombineFileInputFormat
,它会尝试将较小的文件组合并到一个分区中。如果目录中有两个小文件,则两个文件可能最终都在一个分区中。如果我设置minPartitions=2
,那么我可能会返回两个分区。
现在,如果我要设置minPartitions=3
,我仍会返回两个分区,因为wholeTextFiles
的合同是RDD中的每条记录都包含整个文件。