2015-03-02 44 views
-1

我想了解Spark的AverageByKey和CollectByKey API。Apache Spark AverageByKey和CollectByKey说明

我读这篇文章

http://abshinn.github.io/python/apache-spark/2014/10/11/using-combinebykey-in-apache-spark/

,但我不知道,如果它只是我....我不明白这些API是如何工作的

最令人困惑的部分是(x[0] + y[0], x[1] + y[1])

我的理解是x是总数,y是数。那么我们为什么要添加总数和数量呢?

+0

看到这样的回答:http://stackoverflow.com/questions/28240706/explain-the-aggregate-functionality-in-spark-using-python/28241948#28241948 – maasg 2015-03-02 10:24:08

回答

1

相反的:

sumCount = data.combineByKey(lambda value: (value, 1), 
         lambda x, value: (x[0] + value, x[1] + 1), 
         lambda x, y: (x[0] + y[0], x[1] + y[1])) 

你可以写(x是一个总的元组和计数)

sumCount = data.combineByKey(lambda value: (value, 1), 
         lambda (total, count), value: (total + value, count + 1), 
         lambda (total1, count1), (total2, count2): (total1 + total2, count1 + count2)) 

不过,如果你需要计算平均DoubleRDD可能会有帮助。