我是Spark的新手,我想使用方法更新RDD元素的内部状态rdd.foreach,但是它不起作用。这是我的代码示例:
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) }
Run Code Online (Sandbox Code Playgroud)
结果是:
0.0~0.0
0.0~0.0
0.0~0.0
0.0~0.0
0.0~0.0
Run Code Online (Sandbox Code Playgroud)
RDD在设计上是不可变的。这种设计选择使它们更加健壮,因为变异是漏洞的常见来源,并且它支持RDD名称的“弹性”部分(弹性分布式数据集)。如果下游RDD中的分区丢失,Spark可以从其父级重建它。因此,最好将Spark编程视为数据流的构造,即使您不执行流式传输也是如此。
在上foreach,它是专为“纯粹的副作用”操作而设计的,例如写入磁盘,数据库或控制台。
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |