【问题标题】:Write out spark df as single parquet file in databricks在数据块中将 spark df 写为单个镶木地板文件
【发布时间】:2023-02-13 03:37:11
【问题描述】:

我有一个类似下面的数据框:

Filename col1 col2
file1 1 1
file1 1 1
file2 2 2
file2 2 2

我需要将其保存为按文件名分区的镶木地板。当我使用df.write.partitionBy("Filename").mode("overwrite").parquet(file_out_location) 它创建了 2 个文件夹(基于分区)作为 Filename=file1Filename=file1 以及里面的许多零件文件。

如何将它保存为每个分区目录中的单个文件,例如文件名=file1.parquet 和文件名=file2.parquet?

【问题讨论】:

    标签: apache-spark pyspark databricks parquet


    【解决方案1】:

    这会起作用:

    row = df.selectExpr("cast(count(DISTINCT(FileName)) as int) as cnt").head();
    
    df 
      .repartition(row["cnt"], F.col("FileName"))
      .write()
      .partitionBy("FileName")
      .parquet("output-folder-path/");
    

    本质上,您需要根据您打算在 partitionBy() 中使用的相同列对内存数据帧进行分区。如果不像上面那样提供 row["cnt"] - 它将默认为 spark.sql.shuffle.partitions 分区。

    以上将根据分区列为每个分区生成一个文件。

    没有重新分区:

    重新分区:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-02
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      • 2017-03-17
      相关资源
      最近更新 更多