wpadłem this line w źródle Apache kodu Sparkjak interpretować RDD.treeAggregate
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)
}
)
mam wiele kłopotów przeczytaniu tego:
- pierwsze nie mogę znaleźć nic w internecie, że dokładnie wyjaśnia, jak działa
treeAggregate
, jakie są znaczenia tych paramerów. - Po drugie, tutaj
.treeAggregate
wydaje się mieć dwa()() następujące po nazwie metody. Co to może znaczyć? Czy to jest jakaś specjalna składnia scala, której nie rozumiem. - W końcu widzę, że zarówno seqOp, jak i comboOp zwracają krotkę 3 elementową, która pasuje do oczekiwanej zmiennej po lewej stronie, ale która właściwie jest zwracana?
To oświadczenie musi być naprawdę zaawansowane. Nie mogę zacząć tego odcyfrowywać.