apache spark:如何从目录中读取大文本文件并平行处理它们?

时间:2017-05-05 11:03:55

标签: apache-spark pyspark

我有一个只有文本文件的目录。文本文件的大小可能很大(以Gb为单位)。我必须通过向python函数发送前100行文件来处理每个文件。因此对于每个文件,python函数为该文件生成的输出仅取决于前100行。我无法使用wholeTextFiles,因为它会将所有文件的内容加载到内存中。一种方法是我可以迭代目录的每个文件,并逐个使用textFile api处理它。有没有更好的方法?基本上我想要类似于wholeTextFiles所做的事情(即文件目录的一个分区和所有并行运行的任务的一个任务)但我只对文件的前100行感兴趣。

1 个答案:

答案 0 :(得分:0)

我建议你使用binaryFiles。它将为您提供路径和Stream(DataInputStream)。然后,您可以通过从每个文件中只读取前100行来使用此流。

scala片段。

binaryFiles("/directory").flatMap(x=>consumer(x._1, x._2.open))