在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
的价值。我怀疑Spark没有做任何事情。那我怎么算出距离呢?
不要做可变的变量。总的来说这是一个坏主意,并且至少不会因为它是一个分布式系统而根本不起作用。序列的不同分区位于不同的计算机上,并且在不同的JVM中独立处理,每个JVM都有自己的var
副本。
val tempDist = closest
.map { x => squaredDistance(x._2._1, kPoints(x._1) }
.fold(0) { _ + _ }