我的问题是基于this question的第一个答案。我想计算钥匙的元素,我怎么能这样做?
example = sc.parallelize([(alpha, u'D'), (alpha, u'D'), (beta, u'E'), (gamma, u'F')])
abc=example.groupByKey().map(lambda x : (x[0], list(x[1]))).collect()
# Gives [(alpha, [u'D', u'D']), (beta, [u'E']), (gamma, [u'F'])]
我想输出类似下面的内容
alpha:2,beta:1, gamma:1
我开始知道答案如下。为什么这么复杂?有一个更简单的答案吗?是否包含键+所有值?为什么我不能做len(s)-1我在哪里减去一个删除键[0]
map(lambda s: (s[0], len(list(set(s[1])))))
答案 0 :(得分:1)
嗯,这并不复杂。你真正需要的是另一个字数:
from operator import add
example.map(lambda x: (x[0], 1)).reduceByKey(add)
如果您打算collect
,您甚至可以countByKey
:
example.countByKey()
你真的不想在这里使用groupByKey
,但假设毕竟有一些隐藏的理由来应用它:
example.groupByKey().mapValues(len)
为什么len(s) - 1
不起作用?仅仅因为example
是成对RDD,或者换句话说它包含键值对。同样的事情适用于groupByKey
的结果。这意味着len(s)
始终等于2。