是一个action算子,在这个方法里面调用了sc.runJob;
这个方法中定义了两个函数一个是局部聚合函数 一个是全局聚合函数(merge分区的结果的),局部聚合函数中调用了TraverableOnce.reduceLft方法
/**
* Reduces the elements of this RDD using the specified commutative and
* associative binary operator.
*/
def reduce(f: (T, T) => T): T = withScope {
val cleanF = sc.clean(f)
val reducePartition: Iterator[T] => Option[T] = iter => {
if (iter.hasNext) {
// TODO:现在分区内部计算,调用TraversableOnce的reduceLeft对集合进行局部聚合
Some(iter.reduceLeft(cleanF))
} else {
None
}
}
var jobResult: Option[T] = None
// TODO: 全局聚合使用的函数
val mergeResult = (_: Int, taskResult: Option[T]) => {
if (taskResult.isDefined) {
jobResult = jobResult match {
case Some(value)