PySpark-aggregate函数说明

来源:互联网 发布:nosql和mysql结合 编辑:程序博客网 时间:2024/04/30 02:41
聚集各分区内的元素,并利用combOp和zerovalue函数将各分区合并

The functions op(t1, t2) is allowed to modify t1 and return it as its result value to avoid object allocation; however, it should not modify t2.
函数 op(t1, t2) 允许修改t1,并且将其返回, 这样可以避免重新分配对象。   它不能修改t2

1、>>> seqOp = (lambda x, y: (x[0+ y, x[1+ 1))
2、>>> combOp = (lambda x, y: (x[0+ y[0], x[1+ y[1]))
3、>>> sc.parallelize([1234],4).aggregate((00), seqOp, combOp)
(10, 4)
4、>>> sc.parallelize([1234,5],3).aggregate((1,1), seqOp, combOp)
(19,9)

依次解释上述函数
1、建立各分区内的聚集函数,又初始值依次与分区内的函数做操作
2、建立各分区间的组合函数,
3、使用aggregate 样例1
4、使用aggregate 样例2

样例1 解释:
分区数 : 4 
0 : 1
1 : 2
2 : 3
3 : 4

利用zerovalue (0,0) 和 seqOp 对各分区进行聚集  : 
0 : (1,1)
1 : (2 , 1)
2 : (3,1)
3:  (4 , 1)

利用 zerovalue和combOp 进行各分区间的聚合 :
(0,0) + (1,1)+ (2,1)+ (3,1)+ (4,1) = (10,4)

样例2 解释:
分区数 : 3
0 : 1,2
1 : 3,4
2 : 5

利用zerovalue (0,0) 和 seqOp 对各分区进行聚集  : 
0 : (1,1)+(1,1)+(2,1)  = (4,3)
1 : (1,1)+(3,1)+(4,1) = (8,3)
2 : (1,1) + (5,1) = (6,2)

利用 zerovalue和combOp 进行各分区间的聚合 :
(1,1) + (4,3) + (8,3) + (6,2) = (19,9)
0 0
原创粉丝点击