簡體   English   中英

如何使用pyspark計算出現次數

[英]How to count number of occurrences by using pyspark

我正在嘗試使用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)]

我會用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是不可變的,因此無法更新。 而是根據您的數據計算計數

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

然后,如果結果可以適合主主存儲器,則可以從count計算 .collect()。

由於RDD是不可變的,因此您不會更新 count 只需運行所需的計算,然后直接保存到您想要的任何變量:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM