如何在PySpark groupByKey()中的迭代器中对值求和

Leo*_*gna 5 python iterator apache-spark rdd pyspark

我在Spark(Python)上做了我的第一步,我正在努力使用一个迭代器groupByKey().我无法对值进行求和:我的代码如下所示:

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

example.groupByKey()
Run Code Online (Sandbox Code Playgroud)
x [1,1]
y [1]
z [1]
Run Code Online (Sandbox Code Playgroud)

如何获得总和Iterator?我尝试了类似下面的东西,但它不起作用

example.groupByKey().map(lambda (x,iterator) : (x,sum(iterator))
example.groupByKey().map(lambda (x,iterator) : (x,list(sum(iterator)))
Run Code Online (Sandbox Code Playgroud)

zer*_*323 10

你可以简单地mapValuessum:

example.groupByKey().mapValues(sum)
Run Code Online (Sandbox Code Playgroud)

虽然在这种特殊情况下reduceByKey效率更高:

example.reduceByKey(lambda x, y: x + y)
Run Code Online (Sandbox Code Playgroud)

要么

from operator import add

example.reduceByKey(add)
Run Code Online (Sandbox Code Playgroud)