2016-12-25 122 views
0

我想聚合函数蟒蛇火花聚合函数

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) 

,其结果是

res is (15, 5) 

但是,如果我改变以前的代码第三行:

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

结果仍然相同

res is (15, 5) 

它不应该是这样,因为我没有合并两个结果元组。

如果我再次将其更改为

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

结果是:

res is (0, 0) 

五月有人解释一下吗?

+0

没有。我没有改变(0,0)。我改变了combOp功能。 – Jingwei

+0

你能告诉我你正在使用哪个Spark版本?我只是在Spark 2.1和'comb =(lambda x,y:(x [0] + y [0],x [1] + y [1]))'结果是'(15,5) '而comb =(lambda x,y:(y [0],y [1]))'结果是'(5,1)'。 –

+0

顺便说一下,我也在Spark 1.6.3上测试了这个。 –

回答

0

我自己得到了答案。 这发生在独立模式下,其中x是(0,0),y是(15,5)。