Spark / Scala更新另一个地图中变量的值?

问题描述 投票:0回答:1

在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没有做​​任何事情。那我怎么算出距离呢?

scala apache-spark rdd
1个回答
2
投票

不要做可变的变量。总的来说这是一个坏主意,并且至少不会因为它是一个分布式系统而根本不起作用。序列的不同分区位于不同的计算机上,并且在不同的JVM中独立处理,每个JVM都有自己的var副本。

  val tempDist = closest
    .map { x => squaredDistance(x._2._1, kPoints(x._1) }
    .fold(0) { _ + _ }
© www.soinside.com 2019 - 2024. All rights reserved.