我正在浏览现有的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'并且比较了输出,只是发现它只是已经改变的键/值对的顺序,但是对于给定的键,值的计数是最终输出是相同的。
答案 0 :(得分:3)
这是关于你可以在reduceByKey做的重新分区。 根据Apache Spark文档here。
功能:
.reduceByKey(lambda x, y: x + y, 40)
在这段代码中发生了什么,你正在运行lambda代码,因为你已经知道使用值y对累加器x求和。 40是为处理此执行而创建的分区数。
如果您想创建一个新的分区数而不需要额外的随机播放,这非常有用。