开发优化01 之 spark中 filter之后 执行coalesce

博客介绍了Spark开发优化,在filter操作后,若部分数据被过滤,partition不饱和,可执行coalesce算子合并分区以提升计算效率。还补充了repartition是coalesce宽依赖版本,以及repartitionAndSortWithinPartitions算子在重分区并排序时性能更优。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发优化01 之 spark中 filter之后 执行coalesce

coalesce合并(窄依赖算子)。。也就是当一个rdd在执行filter之后,进行合并分区。也就是说比如原先分区有100个,经过filter之后又30%被过滤掉了,平均每个partition的数据量就比原来少了30%,那么partition不饱和,此时为了提交计算的效率,我们可以执行coalesce算子合并,将其中多个partition的数据合并到一个partition中

val conf = new SparkConf()
    .setAppName("_04RepartitionOps")
    .setMaster("local[2]")

val sc = new SparkContext(conf)

val list = 1 to 10000
val listRDD = sc.parallelize(list, 10)

println("partitions num: " + listRDD.getNumPartitions)

//过滤启动的偶数
val oddRDD = listRDD.filter( _ % 2 != 0)

//val coalRDD = oddRDD.coalesce(5, shuffle = true)
//coalesce合并分区增大有一个简写方式:repartition
val coalRDD = oddRDD.repartition(5)
println("合并之后的rdd的分区num: " + coalRDD.getNumPartitions)

println("coalRDD中的记录数: " + coalRDD.count())
sc.stop()

补充

1、repartition是coalesce算子的宽依赖操作的版本。

​ 要想减少分区使用默认的coalesce、增大分区使用repartition。
2、 repartitionAndSortWithinPartitions是Spark官网推荐的一个算子,官方建议,如果需要在repartition重分区之后,还要进行排序,建议直接使用repartitionAndSortWithinPartitions算子。因为该算子可以一边进行重分区的shuffle操作,一边进行排序。shuffle与sort两个操作同时进行,比先shuffle再sort来说,性能可能是要高的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值