gpt4 book ai didi

scala - 在 spark (scala) 中修改对象的 RDD

转载 作者:行者123 更新时间:2023-12-04 19:51:48 25 4
gpt4 key购买 nike

我有:

val rdd1: RDD[myClass]

它已被初始化,我在调试时检查所有成员都有他们的默认值

如果我做
rdd1.foreach(x=>x.modifier())

其中修饰符是 myClass 的成员函数,它修改了一些成员变量

执行此操作后,如果我检查 RDD 中的值,它们尚未被修改。

有人可以解释这里发生了什么吗?
是否可以确保在 RDD 中修改值?

编辑:
class myClass(var id:String,var sessions: Buffer[Long],var avgsession: Long)  {
def calcAvg(){
// calculate avg by summing over sessions and dividing by legnth
// Store this average in avgsession
}
}

如果我这样做,则 avgsession 属性不会更新
myrdd.foreach(x=>x.calcAvg())

最佳答案

RDD 是不可变的,在它包含的对象上调用一个 mutating 方法不会有任何影响。

获得您想要的结果的方法是生成 MyClass 的新副本。而不是修改实例:

case class MyClass(id:String, avgsession: Long) {
def modifier(a: Int):MyClass =
this.copy(avgsession = this.avgsession + a)
}

现在您仍然无法更新 rdd1,但您可以获得包含更新实例的 rdd2:
rdd2 = rdd1.map (_.modifier(18) ) 

关于scala - 在 spark (scala) 中修改对象的 RDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30913771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com