我的格式为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函数以最有效的方式实现此输出
答案 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}))
我希望答案很有帮助