repartition 和 coalesce算子
2018-01-02 本文已影响0人
0_9f3a
coalesce(number,bool)
第一个参数是将RDD划分成几个partition
第二个算子是确定是否发生shuffle,true指的是发生shuffle,false指的是不发生shuffle
repartition(number)
这个算子和coalesce(number,true)的意思是一样的,在RDD转换过程中要发生shuffle。
下图是一个coalesce和repartition的对比
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的分区数,可以提高并行度