如何将每个元素存储到字典并使用pyspark计算字典值?

时间:2018-09-07 08:32:35

标签: pyspark

我想计算字典的元素值。我尝试使用以下代码:

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

如何实现?

1 个答案:

答案 0 :(得分:0)

您的最后一步应该是对项目rdd的reduceByKey函数调用。

final_items = items.reduceByKey(lambda x,y: x+y)
print (final_items.collect())

您可以查看this link,以查看scala,java和python中的reduceByKey的一些示例。