Spark / Scala обновить значение переменной на другой карте? - PullRequest
0 голосов
/ 28 марта 2019

В Spark у меня есть

closest: org.apache.spark.rdd.RDD[(Int, (breeze.linalg.Vector[Double], Int))] = MapPartitionsRDD[476] at map at command-1043253026161724:1

Я хочу вычислить некоторое общее расстояние:

var tempDist=0.0
closest.foreach(x=> tempDist=tempDist+squaredDistance(x._2._1, kPoints(x._1)))

Но это совершенно не меняет значение tempDist.Я подозреваю, что Спарк ничего не делает.Так как я могу рассчитать расстояние?

1 Ответ

2 голосов
/ 28 марта 2019

Не делайте изменяемые переменные.В общем, это плохая идея, и она не работает вообще с spark, по крайней мере, не так, как вы, потому что это распределенная система.Различные разделы последовательности расположены на разных компьютерах и обрабатываются независимо параллельно и в разных JVM , каждая из которых имеет свою собственную копию var.

  val tempDist = closest
    .map { x => squaredDistance(x._2._1, kPoints(x._1) }
    .fold(0) { _ + _ }
...