【发布时间】:2015-07-03 20:00:46
【问题描述】:
我在 Apache Spark 代码源中遇到了this line
val (gradientSum, lossSum, miniBatchSize) = data
.sample(false, miniBatchFraction, 42 + i)
.treeAggregate((BDV.zeros[Double](n), 0.0, 0L))(
seqOp = (c, v) => {
// c: (grad, loss, count), v: (label, features)
val l = gradient.compute(v._2, v._1, bcWeights.value, Vectors.fromBreeze(c._1))
(c._1, c._2 + l, c._3 + 1)
},
combOp = (c1, c2) => {
// c: (grad, loss, count)
(c1._1 += c2._1, c1._2 + c2._2, c1._3 + c2._3)
}
)
我在阅读这篇文章时遇到了很多问题:
- 首先,我在网上找不到任何可以准确解释
treeAggregate工作原理的东西,参数的含义是什么。 - 其次,这里
.treeAggregate方法名后面好像有两个()()。那意味着什么?那是我不明白的一些特殊的scala语法吗? - 最后,我看到 seqOp 和 comboOp 都返回一个 3 元素元组,它与预期的左侧变量匹配,但实际上返回的是哪一个?
这句话一定很高级。我无法开始解读这个。
【问题讨论】:
标签: scala apache-spark rdd distributed-computing