Spark AggregateByKey从pySpark到Scala

时间:2015-06-02 19:59:01

标签: scala apache-spark

我将所有代码转移到scala,我在pySpark中有一个函数,我对如何转换为scala几乎没有任何线索。任何人都可以提供帮助并提供解释吗? PySpark看起来像这样:

.aggregateByKey((0.0, 0.0, 0.0),
                         lambda (sum, sum2, count), value: (sum + value, sum2 + value**2, count+1.0),
                         lambda (suma, sum2a, counta), (sumb, sum2b, countb): (suma + sumb, sum2a + sum2b, counta + countb))

编辑: 到目前为止我所拥有的是:

val dataSusRDD = numFilterRDD.aggregateByKey((0,0,0), (sum, sum2, count) =>

但是我无法理解的是你如何在scala中编写它,因为函数组将值指定为一组动作(sum + value等)。使用正确的语法进入第二个聚合函数。在这种情况下很难连贯地陈述我的麻烦。更多的是我不理解scala以及何时使用括号,vs括号,vs,逗号

1 个答案:

答案 0 :(得分:3)

正如@paul所建议的那样,使用命名函数可能会让你理解什么更简单。

val initialValue = (0.0,0.0,0.0)
def seqOp(u: (Double, Double, Double), v: Double) = (u._1 + v, u._2 + v*v, u._3 + 1)
def combOp(u1: (Double, Double, Double),  u2: (Double, Double, Double)) = (u1._1 + u2._1, u1._2 + u2._2, u1._3 + u2._3)
rdd.aggregateByKey(initialValue)(seqOp, combOp)