假设我在同一目录中有多个CSV文件,这些文件都共享相同的架构。
/tmp/data/myfile1.csv、/tmp/data/myfile2.csv、/tmp/data.myfile3.csv、/tmp/datamyfile4.csv
我想将这些文件读入Spark DataFrame或RDD,并且我希望每个文件都是DataFrame的一部分。我该怎么办?
答案 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不是可拆分的压缩格式。这意味着在加载压缩文件时,每个文件将是其自己的分区。