最好的分区策略通过很少的大分区

时间:2018-06-29 10:41:09

标签: scala performance apache-spark partitioning

我必须通过四键对地理数据进行分区。基本上所有数据都很平衡,但是很少有分区比其他分区大500倍。因此,这会导致非常不平衡的分区阶段,例如3500个任务中的20-30个要比其他任务慢98%。在这种情况下,有什么好的策略吗?

我接下来要做:

stage.repartition(partitionColumns.map(new org.apache.spark.sql.Column(_)):_*)
  .write.partitionBy(partitionColumns:_*)
  .format("parquet")
  .option("compression", "gzip")
  .mode(SaveMode.Append)
  .save(destUrl)

1 个答案:

答案 0 :(得分:1)

.repartition是不必要的,可能导致了问题。

如果不进行设置而仅使用.write.partitionBy...,您仍将获得相同的目录结构,每个目录中将只有多个文件。