2016-12-25 5 views
0

私はPythonのスパーク集計関数

num = sc.parallelize([1,2,3,4,5]) 
seq = (lambda x,y:(x[0]+y,x[1]+1)) 
comb = (lambda x,y:(x[0]+y[0],x[1]+y[1])) 
res = num.aggregate((0,0),seqOp=seq,combOp=comb) 
print("res is ",res) 

集約関数をしようとしていると私は、前のコードの3行目を変更した場合、結果は

res is (15, 5) 

です。しかし:

comb = (lambda x,y:(y[0],y[1])) 

結果は同じです

res is (15, 5) 

私は2つの結果のタプルをマージしていないので、これはありません。

私は

comb = (lambda x,y:(x[0],x[1])) 

に再びそれを変更した場合、結果は次のとおりです。

res is (0, 0) 

誰かがそれを説明することはできますか?

+0

全くありません。私は(0,0)を変更しなかった。私は、combOp関数を変更します。 – Jingwei

+0

Sparkのどのバージョンで作業しているか教えていただけますか?私はSpark 2.1で 'comb =(λx、y:(x [0] + y [0]、x [1] + y [1]))'の結果を ' 'comb =(ラムダx、y:(y [0]、y [1]))'の結果は '(5,1)'でした。 –

+0

ところで、私もSpark 1.6.3でこれをテストしました。 –

答えて

0

私は自分で答えを得ました。 これは、xが(0,0)であり、yが(15,5)であるスタンドアロンモードで発生します。