PySpark之aggregate函数,查看分区数量getNumPartitions()和查看每个分区的内容glom()介绍

聚集各分区内的元素,并利用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

>>> seqOp = (lambda x, y: (x[0] + y, x[1] + 1))

>>> combOp = (lambda x, y: (x[0] + y[0], x[1] + y[1]))

#样例1

>>> rdd1=sc.parallelize([1,2,3,4],4)
>>> rdd1.getNumPartitions()
4
>>> rdd1.glom()
PythonRDD[33] at RDD at PythonRDD.scala:43
>>> rdd1.glom().collect()
[[1], [2], [3], [4]]

>>> rdd1.aggregate((0, 0), seqOp, combOp)

(10, 4)

#样例2

>>> rdd2=sc.parallelize([1,2,3,4,5],3)
>>> rdd2.getNumPartitions()
3
>>> rdd2.glom()
PythonRDD[37] at RDD at PythonRDD.scala:43
>>> rdd2.glom().collect()  
[[1], [2, 3], [4, 5]]

>>> rdd2.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 : (0,0)+(1,1)

1 : (0,0)+(2 , 1)

2 : (0,0)+(3,1)

3:  (0,0)+(4 , 1)

利用 zerovalue和combOp 进行各分区间的聚合 :

(0,0) + (1,1)+ (2,1)+ (3,1)+ (4,1) = (10,4)

样例2 解释:

分区数 : 3

0 : 1

1 : 2,3

2 : 4,5

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

0 :(1,1)+(1,1) = (2,2)

1 : (1,1)+(2,1) +(3,1) = (6,3)

2 : (1,1) +(4,1)+(5,1) = (10,3)

利用 zerovalue和combOp 进行各分区间的聚合 :

(1,1)+(2,2) + (6,3) + (10,3) = (19,9)

程序运行结果:

>>> seqOp = (lambda x, y: (x[0] + y, x[1] + 1))

>>> combOp = (lambda x, y: (x[0] + y[0], x[1] + y[1]))

>>> sc.parallelize([1,2,3,4],4).aggregate((0, 0), seqOp, combOp)

(10, 4)

>>> sc.parallelize([1,2,3,4,5],3).aggregate((1, 1), seqOp, combOp)

(19, 9)

参考:https://blog.csdn.net/a1628864705/article/details/52757384

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值