repartition底层调用的是coalesce(true)
一定具有shuffle,它一般是将少分区变化为多分区
repartition底层调用了mappartitionsRDD将传入的函数key生成随机数,value是数据本身
shuffleRDD将随机生成的key进去你指定的分区--使用Hashpartition
coalesceRDD将迭代器压平
mapPartition-将value数据取出
-----------------------------------------------
运用场景,coalesce传入false和true,不产生shuffle和产生shuffle
coalsece(true/false)产生shuffle和不产生shuffle
当传入false的时候,传入的分区数,必须比父RDD的分区数少,才能改变分区数,如果大于分区数,传入的值无效
repartition必定产生shuffle.因为底层调用的是coalesce(true)
如果是减少分区数量建议采用coalesce(numPartitions, false)方法,这样可以避免shuffle导致数据混洗,从而提高效率!
Spark:repartition和coalesce
最新推荐文章于 2024-09-18 19:16:17 发布