将数据帧的每个分区保存到HDFS/S3中单独的单个文件中



我需要将spark数据帧的每个分区保存到HDFS中单独的单个动态名称文件中,任何关于如何使用spark并行化方法实现的想法

您可以使用DataFrame.repartition()方法来实现它。使用coalesce(1)的问题是并行度下降到1,往好了说可能很慢,往坏了说可能出错。增加这个数字也没有帮助——如果你使用coalesce(10),你会得到更多的并行性,但最终每个分区会有10个文件。

要在不使用coalesce()的情况下为每个分区获取一个文件,请将repartition()与您希望输出由.分区的相同列一起使用

import spark.implicits._
df.repartition($"col1", $"col2", $"col3", $"col4", $"col5").write.partitionBy("col1", "col2", "col3", "col4", "col5").mode(SaveMode.Append).parquet("$location")

相关内容

  • 没有找到相关文章

最新更新