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

时间:2018-10-30 18:35:07

标签: csv apache-spark apache-spark-sql

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

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

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

1 个答案:

答案 0 :(得分:1)

您可以想到两种选择:

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)用Gzip压缩CSV文件

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