Spark文档:添加列表元素的简单示例

时间:2016-07-14 21:27:23

标签: python apache-spark lambda mapreduce

我正在学习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

ab如何单独返回15,但在原始代码中添加了{{1}中的所有元素}}?他们的语法更多吗?谢谢!

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