reduceByKey和lambda

时间:2018-01-04 04:46:08

标签: apache-spark pyspark

我正在浏览现有的Spark代码,这是我学习过程的一部分,我遇到了以下代码:

enPages.map(lambda x: x.split(" "))\
        .map(lambda x: (x[2], int(x[3])))\
        .reduceByKey(lambda x, y: x + y, 40)\
        .collect()

我已基本了解reduceByKey和lambda是如何工作的,但在上面的代码中,我没有得到' 40'在上面的reduceByKey / lambda函数中。任何澄清将不胜感激。

谢谢,萨西。

PS:我尝试删除' 40'并且比较了输出,只是发现它只是已经改变的键/值对的顺序,但是对于给定的键,值的计数是最终输出是相同的。

1 个答案:

答案 0 :(得分:3)

这是关于你可以在reduceByKey做的重新分区。 根据Apache Spark文档here

功能:

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

在这段代码中发生了什么,你正在运行lambda代码,因为你已经知道使用值y对累加器x求和。 40是为处理此执行而创建的分区数。

如果您想创建一个新的分区数而不需要额外的随机播放,这非常有用。