我正在学习Spark,并且遇到了处理并行化集合的文档的this部分。我从文档中复制python中的以下内容以执行Reduce步骤:
from pyspark import SparkConf, SparkContext
configuration = SparkConf().setMaster("local[4]").setAppName("Test")
sc = SparkContext(conf = configuration)
data = [1, 2, 3, 4, 5]
datapar = sc.parallelize(data)
result = datapar.reduce(lambda a, b: a + b)
print result
我得到的答案是15
,正如文件中所解释的那样,是所有元素的补充。但是,如果我将result
修改为datapar.reduce(lambda a, b: a)
并打印result
,我会获得1
,如果我将其修改为datapar.reduce(lambda a, b: b)
,我会获得5
。
值a
和b
如何单独返回1
和5
,但在原始代码中添加了{{1}中的所有元素}}?他们的语法更多吗?谢谢!
答案 0 :(得分:1)
这纯粹是reduce
如何运作的问题。
lambda函数的左参数(在本例中为a
)表示应用lambda函数a + b
的聚合值。右边的值是可迭代的更新值。例如:
iterable a b a + b
======== === === =======
1 - - -
2 1 2 3
3 3 3 6
4 6 4 10
5 10 5 15 <== Final result
这是lambda a + b: a
iterable a b a
======== === === =======
1 - - -
2 1 2 1
3 1 3 1
4 1 4 1
5 1 5 1 <== Final result
...以及lambda a + b: b
iterable a b b
======== === === =======
1 - - -
2 1 2 2
3 2 3 3
4 3 4 4
5 4 5 5 <== Final result