【问题标题】:Grouping and counting in PysparkPyspark 中的分组和计数
【发布时间】:2018-02-21 16:09:43
【问题描述】:

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

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 函数以最有效的方式实现此输出

【问题讨论】:

标签: apache-spark pyspark


【解决方案1】:

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

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

然后使用collectionsCounter函数将组合数组中每个元素的出现次数统计为

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

希望回答对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    相关资源
    最近更新 更多