[spark] repartition与partitionBy的区别

本文探讨了Spark中的repartition和partitionBy算子在数据重新分区时的不同行为。repartition会随机分布数据,而partitionBy允许指定Partitioner,确保相同key的数据位于同一Partition,从而减少shuffle次数,提高效率。通过案例分析和源码剖析,阐述了两者在wordcount场景下的应用和内部实现机制。
摘要由CSDN通过智能技术生成

Spark中,repartitionpartitionBy都是重新分区的算子,其中partitionBy只能作用于PairRDD. 但是,当作用于PairRDD时,repartitionpartitionBy的行为是不同的。repartition是把数据随机打散均匀分布于各个Partition;而partitionBy则在参数中指定了Partitioner(默认HashPartitioner),将每个(K,V)对按照K根据Partitioner计算得到对应的Partition. 在合适的时候使用partitionBy可以减少shuffle次数,提高效率。

案例

下面是一个简单的wordcount的例子,输入的序列分为2个分区,希望输出3个分区。

  • 使用repartition,会产生两次shuffle:repartition一次,reduceByKey一次
val rdd = sc.parallelize(List(('a',1), ('a', 2), ('c', 3), ('b', 4), ('c', 5), ('b', 6), ('a', 7)), 2)
val partRdd = rdd.repartition(3)
val reduceRdd = partRdd.reduceBy
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值