repartition 和 coalesce算子

coalesce(number,bool)
第一个参数是将RDD划分成几个partition

第二个算子是确定是否发生shuffle,true指的是发生shuffle,false指的是不发生shuffle

repartition(number)

这个算子和coalesce(number,true)的意思是一样的,在RDD转换过程中要发生shuffle。

下图是一个coalesce和repartition的对比


repartition 和 coalesce算子_第1张图片
repartition和coalesce对比

问题:coalease(number,false)是不发生shuffle那么如果转换前RDD的partition多于转换后的partition怎么办?

和转换前RDD个数相同。

如果coalease(number,false)转换后RDD的partition比转换前RDD的partition少?

和上图一样,多于的partition只是合并但是不发生shuffle

结论:
1.如果想要增加RDD分区数,那么在重分区的过程必须发生shuffle,也就是说要使用repartition算子或者coalese(number,true)

2.如果向减少RDD分区数,那么在分区的过程可以有shuffle也可以没有shuffle

在实际应用中,增加RDD的分区数就直接使用repartition算子,如果要减少RDD分区数,要使用coalesce(number,false)

增加RDD格式可以改变RDD的分区数,可以提高并行度

你可能感兴趣的:(repartition 和 coalesce算子)