Spark-JobWaiter
2019-01-01 本文已影响14人
丹之
介绍
等待DAGScheduler作业完成的对象。任务完成后,它会通过他们的任务结果给定的处理函数。
一个JobWaiter对象与一个job唯一一一对应,一旦task完成,将该task结果填充到SparkContext.runJob创建的results数组中
构造函数
private[spark] class JobWaiter[T](
dagScheduler: DAGScheduler,
val jobId: Int,
totalTasks: Int,
resultHandler: (Int, T) => Unit)
extends JobListener with Logging {
在SparkContext.runJob中,通过
def runJob[T, U: ClassTag](
rdd: RDD[T],
func: (TaskContext, Iterator[T]) => U,
partitions: Seq[Int]): Array[U] = {
val results = new Array[U](partitions.size)
runJob[T, U](rdd, func, partitions, (index, res) => results(index) = res)
results
}
来创建容纳job结果的数据,数组的每个元素对应与之下标相等的partition的计算结果;并将结果处理函数(index, res) => results(index) = res作为参数传入runJob,以使在runJob内部的创建的JobWaiter对象能够在得知taskSucceeded之后,将该task的结果填充到results中。