從理論上講,我認爲我理解aggregate
的工作方式,但我無法通過一個非常簡單的例子。Apache PySpark版本之間的Spark聚合函數是否發生了變化?
值得注意的是,示例here似乎有錯誤的結果。當我在我的機器,我得到.....
seqOp = (lambda x, y: (x[0] + y, x[1] + 1))
combOp = (lambda x, y: (x[0] + y[0], x[1] + y[1]))
ag = sc.parallelize([1, 2, 3, 4]).aggregate((1,0), seqOp, combOp)
上運行下面的示例然後,結果我得到的是
>>> ag
(12, 4)
但是,我引用的鏈接說,結果是(19, 4)
。這傢伙正在使用不同版本的火花,(1.2.0)
。我正在使用1.5.2.
Spark的各個版本之間的聚合函數是否發生了變化?
如果答案是NO,那麼它仍然是莫名其妙的如何12
是該元組中的第一個元素。只檢查元組的第一個元素,我們可以看到
y
被添加到RDD中每個元素的元組的第一個元素。
因此,從(1,0)開始,並且因爲y
分別是1, 2, 3, 4,
,這應該會導致一系列元組,如:(2,1), (3,1), (4,1), (5,1)
。現在,當我添加元組中的第一個元素時,我得到了14
?有沒有什麼明顯的我缺少如何獲得12
?非常感謝。
可能的重複[在使用python解釋Spark中的聚合函數](http://stackoverflow.com/questions/28240706/explain-the-aggregate-functionality-in-spark-using-python) – zero323
至於命題這是重複的,我仍然對我如何在字面上運行相同的代碼並在我的機器上獲得不同的結果感到困惑? – Candic3
差不多每次都會通過不交換/關聯的函數來減少會給你不同的結果。從代數的角度來看,這些不是有效的操作。這在約翰斯的回答中有很多描述。我甚至不會回答這個問題,但我錯過了這個。我已經對這個答案做了一個小小的修改,但這裏真的沒有更多。 – zero323