Scala 以下内容是否在spark中的每行的每个执行器上创建新对象?

Scala 以下内容是否在spark中的每行的每个执行器上创建新对象?,scala,dataframe,apache-spark,serialization,Scala,Dataframe,Apache Spark,Serialization,我有下面的例子 class Add() { val adding = 2; def getVal = 1 + adding } val a = List(1,2,3).toDF a.filter(col("value") === new AddOne().getVal).show() 这是否会在每个行/数据点的每个执行器上创建一个新对象(AddOne)?否,它将在驱动程序上只创建一次。 下面是==方法的简化代码 def === (other: Any): Column = { va

我有下面的例子

class Add() { val adding = 2; def getVal = 1 + adding }
val a = List(1,2,3).toDF
a.filter(col("value") === new AddOne().getVal).show()

这是否会在每个行/数据点的每个执行器上创建一个新对象(AddOne)?

否,它将在驱动程序上只创建一次。
下面是
==
方法的简化代码

  def === (other: Any): Column = {
    val right = Literal.create(other)
    EqualTo(expr, right)
  }
其中,
expr
是您的
col(“值”)
将被实际值替换,而
right
是一个可折叠文字

如果您有疑问,请使用
df.explain(true)
它将帮助您了解将要执行的操作。
就你而言:

== Parsed Logical Plan ==
'Filter ('value = 3)
+- LocalRelation [value#1]

那么更复杂的getVaue函数呢?如果
getVa
l返回一些原语,它将被传递给
=
方法,这并不重要。或者您的返回类型应该由Spark()支持,否则您将得到异常。我想你被
map
方法弄糊涂了。如果你在那里使用它,答案将是肯定的