cómo interpretar RDD.treeAggregate

Me encontré conesta línea en el código fuente de Apache Spark

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)
      }
    )

Tengo múltiples problemas para leer esto:

Primero, no puedo encontrar nada en la web que explique exactamente cómotreeAggregate funciona, cuál es el significado de los params.Segundo aquí.treeAggregate parece tener dos () () después del nombre del método. ¿Qué podría significar eso? ¿Es esa una sintaxis de escala especial que no entiendo?Finalmente, veo que tanto seqOp como comboOp devuelven una tupla de 3 elementos que coincide con la variable esperada del lado izquierdo, pero ¿cuál realmente se devuelve?

Esta declaración debe ser realmente avanzada. No puedo comenzar a descifrar esto.

Respuestas a la pregunta(1)

Su respuesta a la pregunta