首页 > 编程知识 正文

spark分区数,spark rdd分区数

时间:2023-05-03 05:55:40 阅读:276809 作者:4881

spark的sortBy既是转换算子又是行动算子。 scala> sc.makeRDD(1 to 5, 2).sortBy(x=>x, false, 4)res11: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[13] at sortBy at <console>:25

对应的UI界面是

可以看到出现了一个job,而行动算子才会产生job。点进job去之后,看到下幅图。

从图中可以看出,sortBy排序后产生的RDD的分区数与原先RDD的分区数是一致的,就是最开始的makeRDD中的2(尚硅谷课程中)

scala> sc.makeRDD(1 to 5, 2).sortBy(x=>x, false, 4).glomres1: org.apache.spark.rdd.RDD[Array[Int]] = MapPartitionsRDD[12] at glom at <console>:25

运行之后,和上面的一点差别没有,因为glom不是行动算子不能产生job,就还只是里面sortBy产生的job,点进job去,也跟上面的一样。DAG中并没有添加上glom。

scala> sc.makeRDD(1 to 5, 2).sortBy(x=>x, false, 4).glom.collectres2: Array[Array[Int]] = Array(Array(5), Array(4), Array(3), Array(2, 1))

因为有sortBy行动算子和collect行动算子,所以产生了两个job。

其中sortBy还跟之前的一样。
但是另一个job点进去之后,如下图

可以看到,在这里sortBy作为转换算子,排序后的分区数变成了代码中定义的4,所以产生了一个疑问:感觉尚硅谷课程中说的,sortBy前后的分区数不变是不对的,我个人感觉应该说是,它作为行动算子来说时不变的,但是作为转换算子来说,通过代码重新设定的分区数就会生效

scala> sc.makeRDD(1 to 5, 2).sortBy(x=>x, false, 4).collectres3: Array[Int] = Array(5, 4, 3, 2, 1)

而且它和普通的会产生shuffle的算子另一点不一样的是,它在DAG中的两个stage都有sortBy,但是别的就不是,比如reduceByKey算子

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。