Spark中repartition和coalesce的用法

repartition(numPartitions:Int):RDD[T]和coalesce(numPartitions:Int,shuffle:Boolean=false):RDD[T]函數

他們兩個都是RDD的分區進行從新劃分,repartition只是coalesce接口中shuffle爲true的簡易實現,(假設RDD有N個分區,須要從新劃分紅M個分區)性能

1)、N<M。通常狀況下N個分區有數據分佈不均勻的情況,利用HashPartitioner函數將數據從新分區爲M個,這時須要將shuffle設置爲true。spa

2)若是N>M而且N和M相差很少,(假如N是1000,M是100)那麼就能夠將N個分區中的若干個分區合併成一個新的分區,最終合併爲M個分區,這時能夠將shuff設置爲false,在shuffl爲false的狀況下,若是M>N時,coalesce爲無效的,不進行shuffle過程,父RDD和子RDD之間是窄依賴關係。.net

3)若是N>M而且二者相差懸殊,這時若是將shuffle設置爲false,父子RDD是窄依賴關係,他們同處在一個Stage中,就可能形成Spark程序的並行度不夠,從而影響性能,若是在M爲1的時候,爲了使coalesce以前的操做有更好的並行度,能夠講shuffle設置爲true。接口

總之:若是shuff爲false時,若是傳入的參數大於現有的分區數目,RDD的分區數不變,也就是說不通過shuffle,是沒法將RDDde分區數變多的。get

相關文章
相關標籤/搜索