pyspark 写出spark df作为databricks中的单个Parquet文件

qyyhg6bp  于 2023-01-25  发布在  Spark
关注(0)|答案(1)|浏览(163)

我有一个df的东西如下
| 文件名|列1|列2|
| - ------|- ------|- ------|
| 文件1|1个|1个|
| 文件1|1个|1个|
| 文件2|第二章|第二章|
| 文件2|第二章|第二章|
我需要将其另存为按文件名分区的parquet..当我使用df.write.partitionBy(“Filename”).mode(“overwrite”).parquet(file_out_location)时,它会创建2个文件夹,文件名= file 1和文件名= file 1,以及内部的许多零件文件
我如何将其保存为单个文件,如文件名=文件1.parquet文件名=文件2.parquet

t9aqgxwy

t9aqgxwy1#

这是可行的:

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()中使用的相同列对内存中的 Dataframe 进行分区。如果不像上面那样指定row["cnt"]-它将默认为spark.sql.shuffle.partitions分区。
以上操作将根据分区列为每个分区生成一个文件。
无再分配:

重新分配:

相关问题