在Pyspark分组和统计

时间:2018-02-21 16:09:44

标签: apache-spark pyspark

我的格式为RDD(Group,[word1,word2,... wordn])。它包含一个组和该组下的单词。如果我有以下输入

rdd=(g1,[w1,w2,w4]),(g2[w3,w2]),(g3[w4.w1]),(g3[w1,w2,w3]),(g2[w2])

我想收集输出,说明一个单词出现的次数。输出格式为。

Word  Group1 Group2  Group3
w1     1       0       2
w2     1       2       1
w3     0       1       1
w4     1       0       1

我可以使用什么pyspark函数以最有效的方式实现此输出

1 个答案:

答案 0 :(得分:0)

您应该在 rdd 上使用reduceByKey将公共密钥数组合并为

def combineArrays(x, y):
    return x + y
rdd = rdd.reduceByKey(combineArrays)

然后使用Counter collections函数计算组合数组中每个元素的出现次数

from collections import Counter
rdd.mapValues(lambda x: Counter(x))

你应该输出

('g3', Counter({'w1': 2, 'w4': 1, 'w3': 1, 'w2': 1}))
('g1', Counter({'w4': 1, 'w2': 1, 'w1': 1}))
('g2', Counter({'w2': 2, 'w3': 1}))

我希望答案很有帮助