spark多阶段任务

    import org.apache.spark.rdd.RDD
    val lines: RDD[String] = sc.parallelize(List("A B C","A B D"),3)
    //切分压平
    val words: RDD[String] = lines.flatMap(_.split(" "))

    //将单词和1组合
    val wordAndOne: RDD[(String, Int)] = words.map((_, 1))

    val reduced: RDD[(String, Int)] = wordAndOne.reduceByKey((x, y) => {
      val z = x + y
      z
    })
    //排序
    val sorted: RDD[(String, Int)] = reduced.sortBy(_._1, true)
//    val sorted: RDD[(String, Int)] = reduced.sortByKey(true)
    val array = sorted.collect();
惊讶发现执行sortBy就开始工作了,所以sortBy也是action


先看第一个job 即job-0,sortByKey触发的

job-0分成两个阶段,由于reduceByKey宽依赖来划分的(是否宽依赖都会shuffle?),阶段一用时2s,shuffle 写入,阶段二0.2s,shuffle读,阶段1执行完才会执行阶段2

job-0 -- stage-0

executor上的task time是所执行task的总和,不代表executor的实际运行时间 
job-0 -- stage-1

各阶段总耗时在下图可以看到

 第二个job 及collect action

由于第一个阶段,在前一个job执行时阶段结果已经write到磁盘中,所以直接跳过,初始rdd时给了三个分片,后续没有做重分区,所以每个阶段都是三个分片,对应三个任务

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值