spark-repartition底层实现

文章详细阐述了Spark中rdd的repartition和coalesce操作,包括如何调整分区数,数据如何在分区间分布以及shuffle过程。repartition通过shuffle重新分配数据,而coalesce用于减少分区数,两者都影响任务执行效率和数据存储。同时,对于key-value对的rdd,repartitionAndSortWithinPartitions会进行排序操作。
摘要由CSDN通过智能技术生成

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从小到大排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值