美文网首页
spark中repartition与coalesce的区别

spark中repartition与coalesce的区别

作者: scott_alpha | 来源:发表于2019-10-19 20:23 被阅读0次

    repartition和coalesce两个都是对RDD的分区进行重新划分,repartition只是coalesce接口中shuffle为true的简易实现。
    假设RDD有N个分区,需要重新划分成M个分区,有以下几种情况
    1.N小于M
    一般情况下,N个分区有数据分布不均匀的状况,利用hashPartitioner函数将数据重新分区为M个,这时需要将shuffle设置为true。
    2.N大于M且和M相差不多
    假如N是1000,M是100,那么久可以将N个分区中的若干个分区合并成一个新的分区,最终合并为M个分区,这时可以将shuffle设置为false,在shuffle为false的情况下,如果M>N时,coalesce为无效的,不进行shuffle过程,父RDD和子RDD之间是窄依赖关系。
    3.N大于M且和M相差悬殊
    这时如果将shuffle设置为false,父子RDD是窄依赖关系,他们同处在一个stage中,就可能造成spark程序的并行度不够,从而影响性能,如果在M为1的时候,为了时coalesce之前的操作有更好的并行度,可以将shuffle设置为true。
    总之,如果shuffle为false时,如果传入的参数大于现有的分区数目,RDD的分区数不变,就是说不经过shuffle,是无法将RDD的分区数变多的。

    相关文章

      网友评论

          本文标题:spark中repartition与coalesce的区别

          本文链接:https://www.haomeiwen.com/subject/hmmnmctx.html