我想计算字典的元素值。我尝试使用以下代码:
def f_items(data, steps=0):
items = defaultdict(int)
for element in data:
if element in data:
items[element] += 1
else:
items[element] = 1
return items.items()
data = [[1, 2, 3, 'E'], [1, 2, 3, 'E'], [5, 2, 7, 112, 'A'] ]
rdd = sc.parallelize(data)
items = rdd.flatMap(lambda data: [y for y in f_items(data)], True)
print (items.collect())
此代码的输出如下所示:
[(1, 1), (2, 1), (3, 1), ('E', 1), (1, 1), (2, 1), (3, 1), ('E', 1), (5, 1), (2, 1), (7, 1), (112, 1), ('A', 1)]
但是,它应该显示以下结果:
[(1, 2), (2, 3), (3, 3), ('E', 2), (5, 1), (7, 1), (112, 1), ('A', 1)]
如何实现?
答案 0 :(得分:0)
您的最后一步应该是对项目rdd的reduceByKey函数调用。
final_items = items.reduceByKey(lambda x,y: x+y)
print (final_items.collect())
您可以查看this link,以查看scala,java和python中的reduceByKey的一些示例。