【问题标题】:Spark read multiple CSV files, one partition for each fileSpark读取多个CSV文件,每个文件一个分区
【发布时间】:2019-04-03 21:04:12
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案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 不是可拆分的压缩格式。这意味着在加载 gzip 文件时,每个文件都将是它自己的分区。

    【讨论】:

    • 有没有办法将每个 CSV 文件分别读入一个分区?在我的用例中,我想利用它并为每个分区生成一个行号,因为我的输入 CSV 文件中没有排序列。
    猜你喜欢
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    相关资源
    最近更新 更多