如果我执行以下代码:
object TestObject extends Serializable {
private var x = 1;
def inc(): Unit = { x = x + 1 }
def get: Int = x
}
object ObjectSerMain {
def main(args: Array[String]): Unit = {
val spark = getSparkSession()
import spark.implicits._
val df = Seq(1 to 20 toList).toDF("num").repartition(5)
val a = TestObject
a.inc()
val transformed = df.map(row => {
val value: Int = row.getAs[Int]("num")
value + a.get
}).toDF("num")
transformed.show(20)
}
}
尽管我在做 val a = TestObject
在司机身上,做什么 a.inc()
在对象上,最终转换的Dataframe为每个值加1,而不是2。
当我移除 extends Serializable
从 TestObject
代码不起作用,这确保驱动端对象被传递给执行器。
因此,它在执行器上被重新初始化,即构造函数被重新调用。
有什么解决办法吗?
暂无答案!
目前还没有任何答案,快来回答吧!