pyspark.RDD aggregate 操作详解

本文深入解析了Apache Spark中RDD的Aggregate函数工作原理,通过实例展示了如何使用seqOp和combOp进行分区聚合,以及最终结果的合并过程。适用于理解Spark内部处理机制及优化大数据处理任务。

aggregate(zeroValue, seqOp, combOp)
Aggregate the elements of each partition, and then the results for all the partitions, using a given combine functions and a neutral “zero value.”
seqOp
“”"
每个分区执行的聚合函数
对rdd中按分区每个元素y执行此函数, x为上一次的执行结果, 首次计算时使用默认值zeroValue
“”"
comOp
“”"
对每个分区的结果执行的聚合函数
执行此函数时, 每个分区的计算结果y执行此函数, x为上一次的执行结果, 首次计算时使用默认值zeroValue
“”"

例子 分5partition


def seqOp1(x, y):
    print('seqOP')
    print('x='+str(x))
    print('y='+str(y))
    a = x[0] + y
    b = x[1] + 1
    print((a, b))
    print("*" * 22)
    return (a, b)


def combOp1(x, y):
    print('comOp')
    print('x=' + str(x))
    print('y=' + str(y))
    a = x[0] + y[0]
    b = x[1] + y[1]
    print(a, b)
    print("%%" * 22)
    return (a, b)


a = sc.parallelize([100, 200, 300, 400, 500], 5).aggregate((1, 1), seqOp1, combOp1)

print(a)

result:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

例子 分4partition

def seqOp1(x, y):
    print('seqOP')
    print('x='+str(x))
    print('y='+str(y))
    a = x[0] + y
    b = x[1] + 1
    print((a, b))
    print("*" * 22)
    return (a, b)


def combOp1(x, y):
    print('comOp')
    print('x=' + str(x))
    print('y=' + str(y))
    a = x[0] + y[0]
    b = x[1] + y[1]
    print(a, b)
    print("%%" * 22)
    return (a, b)


a = sc.parallelize([100, 200, 300, 400, 500], 4).aggregate((1, 1), seqOp1, combOp1)

print(a)

结果
在这里插入图片描述
在这里插入图片描述

例子 分3partition

def seqOp1(x, y):
    print('seqOP')
    print('x='+str(x))
    print('y='+str(y))
    a = x[0] + y
    b = x[1] + 1
    print((a, b))
    print("*" * 22)
    return (a, b)


def combOp1(x, y):
    print('comOp')
    print('x=' + str(x))
    print('y=' + str(y))
    a = x[0] + y[0]
    b = x[1] + y[1]
    print(a, b)
    print("%%" * 22)
    return (a, b)


a = sc.parallelize([100, 200, 300, 400, 500], 3).aggregate((1, 1), seqOp1, combOp1)

print(a)

在这里插入图片描述

在这里插入图片描述

同理1分区

a = sc.parallelize([100, 200, 300, 400, 500], 1).aggregate((1, 1), seqOp1, combOp1)

结果
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值