Spark读取多个CSV文件,每个文件一个分区



假设我在同一目录中有多个CSV文件,这些文件都共享相同的模式。

/tmp/data/myfile1.csv、/tmp/data/myfile2.csv、.tmp/data.myfile3.csv、/tmp/datamyfile4.csv

我想将这些文件读取到Spark DataFrame或RDD中,并且我希望每个文件都是DataFrame的一部分。我该怎么做?

我能想到两个选项:

1(使用输入文件名

与其试图直接控制分区,不如将输入文件的名称添加到DataFrame中,并将其用于您需要进行的任何分组/聚合操作。这可能是您的最佳选择,因为它更符合spark的并行处理意图,您可以告诉它该做什么,并让它知道如何做。你可以用这样的代码来做到这一点:

SQL:

SELECT input_file_name() as fname FROM dataframe

或者Python:

from pyspark.sql.functions import input_file_name
newDf = df.withColumn("filename", input_file_name())

2(压缩您的CSV文件

Gzip不是可拆分的压缩格式。这意味着在加载gzip文件时,每个文件都将是自己的分区。

相关内容

最新更新