gpt4 book ai didi

python - reduceByKey 在 Spark 中有两列

转载 作者:太空宇宙 更新时间:2023-11-04 10:23:15 28 4
gpt4 key购买 nike

我正在尝试在 Spark 中按两列进行分组,并按如下方式使用 reduceByKey:

pairsWithOnes = (rdd.map(lambda input: (input.column1,input.column2, 1)))
print pairsWithOnes.take(20)

上面的 maps 命令工作正常并生成三列,第三列全部为一。我尝试将前两列的第三个相加如下:

reduced = pairsWithOnes.reduceByKey(lambda a,b,c : a+b+c)
print reduced.take(20)

但是,运行最后一个打印命令会抛出错误“要解包的值太多”。有人可以指导我以正确的方式减少两列吗?

最佳答案

据我了解,您的目标是计算 (column1,input.column2) 对,您的输入看起来或多或少像这样:

from numpy.random import randint, seed
from pyspark.sql import Row

seed(323)

rdd = sc.parallelize(
Row(column1=randint(0, 5), column2=randint(0, 5)) for _ in range(1000))
rdd.take(3)

结果:

[Row(column1=0, column2=0),
Row(column1=4, column2=4),
Row(column1=3, column2=2)]

首先你必须按 (column1, column2) 分组:

pairsWithOnes = rdd.map(lambda input: ((input.column1, input.column2), 1))
pairsWithOnes.take(3)

结果:

[((0, 0), 1), ((4, 4), 1), ((3, 2), 1)]

剩下的就是简单的reduceByKey:

pairsWithOnes.reduceByKey(lambda x, y: x + y).take(3)

结果

[((1, 3), 37), ((3, 0), 43), ((2, 1), 40)]

关于python - reduceByKey 在 Spark 中有两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30968475/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com