2022年美团技术年货 合辑Pipeline 中的 mapPartitions 在进行下一部分讲解之前,我们先简要介绍一下 Spark 的懒执行机制。Spark 的算 子分为 Action 和 Transformation 两大类。RDD 的依赖关系构成了数据处理的有 向无环图 DAG。只有当 Action 算子出现时,才会执行 Action 算子与前面一系列 Transformation 算子构成的 DAG。Spark 还会根据 为例,最后 runTask() 方法调用了 rdd.iterator()。 ResultTask.scala override def runTask(context: TaskContext): U = { ...... // 源码缩略不进行展示:初始化一些需要的对象 val (rdd, func) = ser.deserialize[(RDD[T], (TaskContext, Iterator[T]) getCurrentThreadCpuTime - deserializeStartCpuTime } else 0L // 这里的 func() 调用了 rdd.iterator() func(context, rdd.iterator(partition, context)) } 而 RDD 的 iterator 方法的源码如下,其调用逻辑最终都会进入 computeOrRead- Checkpoint 方法,若没有0 码力 | 1356 页 | 45.90 MB | 1 年前3
共 1 条
- 1













