请记住,对您的数据进行重新分区是一个相当昂贵的操作。还好,Spark还有一个名为coalesce()的repartition()的优化版本,它允许避免数据移动,但只有在减少RDD分区的数量的时候使用。
一、repartition和coalesce区别
1、coalesce操作只能减少分区,它是使用现有分区来减少shuffer的数据量,在一些具体的情况下,我发现repartition比coalesce更快。
在我的应用程序中,当我们估计的文件数量低于一定的阈值时,重新分区工作会更快。
if(numFiles > 20)
df.coalesce(numFiles).write.mode(SaveMode.Overwrite).parquet(dest)
else
df.repartition(numFiles).write.mode(SaveMode.Overwrite).parquet(dest)
2、repartion操作可以增加分区,也可减少分区,它创建新的分区,进行完全的shuffer操作