spark1.2.0源码分析之RDD的reduce操作

本文深入探讨了Spark 1.2.0中RDD的reduce操作,该操作作为action触发计算。reduce通过processFunc(即reducePartition)对每个分区的数据应用迭代f函数,而mergeResult作为任务完成的回调函数,在JobWaiter类中实现,用于合并结果。
摘要由CSDN通过智能技术生成

reduce操作在RDD中属于action操作,伴随着sc.runJob的调用,源码如下(基于spark 1.2.0版本):

  def reduce(f: (T, T) => T): T = {
    val cleanF = sc.clean(f)
    val reducePartition: Iterator[T] => Option[T] = iter => {
      if (iter.hasNext) {
        Some(iter.reduceLeft(cleanF))   //一个一个迭代,从左开始
      } else {
        None
      }
    }
    var jobResult: Option[T] = None
    val mergeResult = (index: Int, taskResult: Option[T]) => {  //当每个任务执行完后,都会返回一个这样的结果,index为分区的索引
      if (taskResult.isDefined) {
        jobResult = jobResult match {
          case Some(value) => Some(f(value, taskResult.get))   //第二个分区的结果与第一个分区的一起,再用f处理
          case None => taskResult  //当第一个任务完成时,会进入,taskResult 为第一个分区的结果
        }
      }
    }
    sc.runJob(this, reducePartition, mergeResult)   //任务的执行
    /
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值