如何使用pysp计算出现次数

2024-04-25 10:29:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试着用pyspark来计算出现的次数。

假设我有这样的数据:

data = sc.parallelize([(1,[u'a',u'b',u'd']),
                       (2,[u'a',u'c',u'd']),
                       (3,[u'a']) ])

count = sc.parallelize([(u'a',0),(u'b',0),(u'c',0),(u'd',0)])

可以在data中计算出现次数并在count中更新吗?

结果应该是[(u'a',3),(u'b',1),(u'c',1),(u'd',2)]


Tags: 数据datacount次数pysparkscparallelize
3条回答

我将使用Counter

>>> from collections import Counter
>>>
>>> data.values().map(Counter).reduce(lambda x, y: x + y)
Counter({'a': 3, 'b': 1, 'c': 1, 'd': 2})

因为rdd是不可变的,所以不会更新。只需运行所需的计算,然后直接保存到所需的任何变量:

In [17]: data.flatMap(lambda x: x[1]).map(lambda x: (x, 1)).reduceByKey(lambda x, y: x + y).collect()
Out[17]: [('b', 1), ('c', 1), ('d', 2), ('a', 3)]

RDD是不可变的,因此无法更新。相反,根据数据计算计数如下:

count = (rdd
         .flatMap(lambda (k, data): data)
         .map(lambda w: (w,1))
         .reduceByKey(lambda a, b: a+b))

然后,如果结果可以放入主内存,请随意使用count中的.collect()。

相关问题 更多 >