Spark中RDD算子reduce,aggregate,fold与reduceByKey,aggregateByKey,foldByKey的区别

本文深入探讨了Spark中的行动算子(如reduce、aggregate和fold)与转化算子(reduceByKey、aggregateByKey和foldByKey)的区别。行动算子触发实际计算,而转化算子仅定义计算逻辑。在reduceByKey等转化算子中,计算逻辑仅在分区内部执行,而在aggregateByKey和foldByKey中,零值(zeroValue)不仅参与分区内的计算,还参与到分区间的合并过程中。理解这些算子的工作原理对于优化Spark应用至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几个算子主要分为两类:
行动算子:reduce,aggregate,fold
转化算子:reduceByKey,aggregateByKey,foldByKey

行动算子与转化算子的区别:
行动算子会执行Spark作业执行,而转化算子只是计算逻辑的封装

/**
   * Run a function on a given set of partitions in an RDD and pass the results to the given
   * handler function. This is the main entry point for all actions in Spark.
   *
   * @param rdd target RDD to run tasks on
   * @param func a function to run on each partition of the RDD
   * @param partitions set of partitions to run on; some jobs may not want to compute on all
   * partitions of the target RDD, e.g. for operations like `first()`
   * @param resultHandler callback to pass each result to
   */
  def runJob[T, U: ClassTag](
      rdd: RDD[T],
      func: (TaskContext, Iterator[T]) => U,
      partitions: Seq[Int],
      resultHandler: (Int, U) => Unit): Unit = {
    if (stopped.get()) {
      throw new IllegalStateException("SparkContext has been shutdown")
    }
    val callSite = getCallSite
    val cleanedFunc = clean(func)
    logInfo("Starting job: " + callSite.shortForm)
    if (conf.getBoolean("spark.logLineage", false)) {
      logInfo("RDD's recursive dependencies:\n" + rdd.toDebugString)
    }
    dagScheduler.runJob(rdd, cleanedFunc, partitions, callSite, resultHandler, localProperties.get)
    progressBar.foreach(_.finishAll())
    rdd.doCheckpoint()
  }

reduce行动算子与转化算子reduceByKey:
除开一个是行动算子一个是转化算子,计算逻辑是一样的

aggregate与aggregateByKey:
aggregateByKey中,zoreValue只会参与每个分区中每个key首次计算,但是在aggregate中zoreValue不仅仅只是参与分区内计算还会参与分区间计算

fold与foldByKey:
类似aggregate与aggregateByKey的区别,aggregate中zoreValue参与分区内计算,还参与分区间计算

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值