2015-07-12 67 views
4

我正在做Spark(Python)的第一步,我正在努力處理groupByKey()中的迭代器。我無法總結的價值觀:我的代碼如下所示:如何在PySpark中的迭代器中求和值groupByKey()

example = sc.parallelize([('x',1), ('x',1), ('y', 1), ('z', 1)]) 

example.groupByKey() 
x [1,1] 
y [1] 
z [1] 

如何對Iterator的總和?我想是這樣之下,但它不工作

example.groupByKey().map(lambda (x,iterator) : (x,sum(iterator)) 
example.groupByKey().map(lambda (x,iterator) : (x,list(sum(iterator))) 

回答

10

你可以簡單地mapValuessum

example.groupByKey().mapValues(sum) 

雖然在這種特殊情況下reduceByKey效率要高得多:

example.reduceByKey(lambda x, y: x + y) 

from operator import add 

example.reduceByKey(add) 
1

要添加@ zero323的答案,另一種解決方案將是:

example.groupByKey().map(lambda (x,iterator) : (x,len(iterator)))