repartition
1. rdd调用repartition(num)算子
2.调用coalesce(num,true)
解释:
rdd有多个task分区,
444行代码 index代表分区编号,从0开始
items代表某个task的数据
445行 根据index和nunPartitions 生成一个开始数字 position。
遍历items的数据,每条数据增加前缀key,就是这个开始的数字累加1。
distributePartition这个新生成的rdd在shuffleWriteMap阶段 写入shuffle
3.getPartition方法
前缀key和numPatitions 通过85行代码 生成结果分区数字, 决定这条数据落地到哪个分区。
rdd->shuffleWriteMap->shuffle->shuffleRead->rsRdd
repartitionAndSortWithinPartitions
rdd是key-value对的数据,必须有key
1.调用repartitionAndSortWithinPartitions(num)算子
2.getPartition方法
key和numPatitions 通过85行代码 生成结果分区数字, 决定这条数据落地到哪个分区。
3.rsRdd
每个分区的数据根据key从小到大排序