mi sono imbattuto in this line nella sorgente di Apache codice di Sparkcome interpretare 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)
}
)
ho più difficoltà a leggere questo:
- un primo momento non riesco a trovare nulla sul web che spiega esattamente come funziona
treeAggregate
, qual è il significato dei parametri. - In secondo luogo, qui
.treeAggregate
sembra avere due()() seguendo il nome del metodo. Cosa potrebbe significare? È una qualche scala sintassi speciale che non capisco. - Infine, vedo seqOp e comboOp restituiscono una tupla di 3 elementi che corrisponde alla variabile del lato sinistro atteso, ma quale viene effettivamente restituita?
Questa dichiarazione deve essere davvero avanzata. Non posso iniziare a decifrarlo.