как интерпретировать RDD.treeAggregate

Я столкнулся сэта линия в исходном коде 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)
      }
    )

У меня есть несколько проблем с чтением этого:

Во-первых, я не могу найти в Интернете ничего, что объясняет, как именноtreeAggregate работает, в чем смысл парам.Во-вторых, здесь.treeAggregate похоже, что два () () после имени метода. Что бы это могло значить? Это какой-то особый синтаксис scala, который я не понимаю.Наконец, я вижу, что и seqOp, и comboOp возвращают кортеж из 3 элементов, который соответствует ожидаемой левой переменной, но какой из них действительно возвращается?

Это утверждение должно быть действительно продвинутым. Я не могу начать расшифровывать это.

Ответы на вопрос(1)

Ваш ответ на вопрос