Spark部分:重新分区(repartition和coalesce)

本文详细介绍了Spark中`repartition`和`coalesce`两种重分区方法。`coalesce`用于减少分区数,可选择是否进行shuffle操作;而`repartition`则是`coalesce`的shuffle版本,常用于增加分区数以实现数据均衡。在使用时需要注意,当N个分区减少到M个(N>M),且差距不大时,可不进行shuffle;但当N大幅大于M时,为了保持并行度,可能需要设置shuffle为true。
摘要由CSDN通过智能技术生成

coalesce

def coalesce(numPartitions:Int,shuffle:Boolean=false):RDD[T] 
该函数用于将RDD进行重分区,使用HashPartitioner。 
第一个参数为重分区的数目,第二个为是否进行shuffle,默认为false。

repartition

def repartition(numPartitions: Int): RDD[T] 
该函数其实就是coalesce函数第二个参数为true的实现。

使用注意

他们两个都是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是窄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值