spark源码action系列-count

来源:互联网 发布:人工智能东南大学 编辑:程序博客网 时间:2024/05/16 14:23

count操作中:把执行count操作的rdd中所有的partition的数据的总和时行相加,得到一个Long类型的返回值的操作.也就是说这个操作得到一个Long值,这个值当前的这个RDD中每个partition的iterator的总记录条数和.

taskfunction的定义部分:

这里主要是通过对每个partition中的iterator时行迭代,得到这个iterator的总记录数.

这里的Utils.getIteratorSize就是对这个partition中的iterator进行next并记数的操作.

这里传给task中执行的最终的函数是根据partition中的iterator进行next的操作,每next一下,记录一个count值,到iterator迭代完成后,返回这个count值,就是这个task的返回值.

sc.runJob(thisUtils.getIteratorSize _)

 

Driver端的resultHandler的定义部分:

val results = new Array[U](partitions.size)

这里把每个task返回的count值先存储到task对应的partition的下标位置 .

(indexres) => results(index) = res

 

Driver端最终结果的返回部分:

最后,把这个results的数组(数组中每个位置存储了一个count值)进行相加操作.

def count(): Long sc.runJob(thisUtils.getIteratorSize _).sum

0 0
原创粉丝点击