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

开发优化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来说,性能可能是要高的。

你可能感兴趣的:(开发优化)