當前位置:編程學習大全網 - 網站源碼 - Spark中repartition和coalesce的區別與使用場景解析

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。

2)如果N>M並且N和M相差不多,(假如N是1000,M是100)那麽就可以將N個分區中的若幹個分區合並成壹個新的分區,最終合並為M個分區,這時可以將shuff設置為false,在shuffl為false的情況下,如果M>N時,coalesce為無效的,不進行shuffle過程,父RDD和子RDD之間是窄依賴關系。

3)如果N>M並且兩者相差懸殊,這時如果將shuffle設置為false,父子RDD是窄依賴關系,他們同處在壹個Stage中,就可能造成spark程序的並行度不夠,從而影響性能,如果在M為1的時候,為了使coalesce之前的操作有更好的並行度,可以講shuffle設置為true。

總之:如果shuff為false時,如果傳入的參數大於現有的分區數目,RDD的分區數不變,也就是說不經過shuffle,是無法將RDDde分區數變多的。

  • 上一篇:VC-MFC如何畫實心圓?
  • 下一篇:關於IP的問題。非高手勿進。
  • copyright 2024編程學習大全網