我需要将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")