Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 更新RDD元素的内部状态_Apache Spark_Rdd - Fatal编程技术网

Apache spark 更新RDD元素的内部状态

Apache spark 更新RDD元素的内部状态,apache-spark,rdd,Apache Spark,Rdd,我是Spark的新手,我想用RDD.foreach方法更新RDD元素的内部状态,但它不起作用。下面是我的代码示例: class Test extends Serializable{ var foo = 0.0 var bar = 0.0 def updateFooBar() = { foo = Math.random() bar = Math.random() } } var testList = Array.fill(5)(new Test()) var t

我是Spark的新手,我想用
RDD.foreach
方法更新RDD元素的内部状态,但它不起作用。下面是我的代码示例:

class Test extends Serializable{
  var foo = 0.0
  var bar = 0.0

  def updateFooBar() = {
    foo = Math.random()
    bar = Math.random()
  }
}

var testList = Array.fill(5)(new Test())
var testRDD = sc.parallelize(testList)
testRDD.foreach{ x => x.updateFooBar() }
testRDD.collect().foreach { x=> println(x.foo+"~"+x.bar) }
结果是:

0.0~0.0
0.0~0.0
0.0~0.0
0.0~0.0
0.0~0.0

RDD在设计上是不变的。这种设计选择使它们更加健壮,因为变异是常见的错误源,并且它支持RDD名称(弹性分布式数据集)的“弹性”部分;如果下游RDD中的分区丢失,Spark可以从其父分区重建它。因此,最好将Spark编程视为数据流的构造,即使您不进行流式处理


在foreach上,它是为“纯副作用”操作而设计的,如写入磁盘、数据库或控制台。

RDD是设计不变的。这种设计选择使它们更加健壮,因为变异是常见的错误源,并且它支持RDD名称(弹性分布式数据集)的“弹性”部分;如果下游RDD中的分区丢失,Spark可以从其父分区重建它。因此,最好将Spark编程视为数据流的构造,即使您不进行流式处理

在foreach上,它是为“纯副作用”操作而设计的,如写入磁盘、数据库或控制台