scala - Spark/Scala 更新另一个地图中的变量值?
问题描述
在 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
's 的价值。我怀疑 Spark 什么也没做。那么如何计算距离呢?
解决方案
不要做可变变量。一般来说,这是一个坏主意,并且根本不适用于 spark,至少不是你这样做的方式,因为它是一个分布式系统。序列的不同分区位于不同的计算机上,并且在不同的 JVM中并行独立处理,每个 JVM 都有自己的var
.
val tempDist = closest
.map { x => squaredDistance(x._2._1, kPoints(x._1) }
.fold(0) { _ + _ }
推荐阅读
- firebase - 如何在 Spring Boot Project 中的 Heroku 上使用 Google API 凭据
- sql - 试图写一个麻烦的sql join
- zend-framework - Laminas Fieldset 具有静态 InputFilterSpecification
- asp.net-core-webapi - 使用 ftp 上传到 web api
- node.js - 从 nodejs 应用程序写入 kubernetes 参数存储
- git - 将一个功能分支与另一个合并,可以选择在没有提交历史的情况下进行合并
- javascript - 如何让表单提交事件监听器在 js 中工作?
- r - 如何将一列中的月份和年份分隔为R中的两列
- python - python中的饼图
- javascript - Puppeteer:登录对话框上的访问字段