Sp中有两列的reduceByKey

2024-10-01 13:46:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在Spark中按两列分组,并使用reduceByKey,如下所示:

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

上面的maps命令工作正常,生成三列,第三列都是一列。我试着用前两栏总结第三栏的内容:

^{pr2}$

但是,运行最后一个print命令会抛出一个错误“值太多,无法解包”。有人能给我指点正确的方法把它减少两列吗?在


Tags: lambda命令map内容inputsparkmapsprint
1条回答
网友
1楼 · 发布于 2024-10-01 13:46:21

据我所知,您的目标是计数(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)

结果:

^{pr2}$

首先要按a分组(第1列,第2列):

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)]

相关问题 更多 >