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
方法弄糊涂了。如果你在那里使用它,答案将是肯定的