spark之sortBy分区数

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).glom
res1: 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.collect
res2: 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).collect
res3: Array[Int] = Array(5, 4, 3, 2, 1)

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

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值