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

Apache spark ApacheSpark:如何从目录中读取大型文本文件并并行处理它们?,apache-spark,pyspark,Apache Spark,Pyspark,我有一个只有文本文件的目录。文本文件的大小可以很大(以Gb为单位)。我必须通过向python函数发送前100行文件来处理每个文件。因此,对于每个文件,python函数为该文件生成的输出仅取决于前100行。我不能使用wholeTextFiles,因为它会将所有文件的内容加载到内存中。一种方法是我可以遍历目录中的每个文件,并使用textFileapi逐个处理它。还有更好的办法吗?基本上,我希望类似于wholeTextFiles所做的事情(即一个任务对应一个文件目录分区,所有任务并行运行),但我只对文

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

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

scala代码片段

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

斯帕克很懒。在您执行操作之前,它不会进行评估。在读取文件之后。您可以将RDD转换为Dataframe并选择前100行,也可以使用zipWithIndex并过滤tuple直到100行。尝试了解有关转换和操作的更多信息。它能回答你的问题。。。