Python 如果在pyspark中使用类方法作为udf,会发生什么?
如果我定义一个Python函数并将其用于PySpark UDF,我理解会发生什么 但是,我并不完全清楚PySpark在调用实例化对象的方法时做了什么,如:Python 如果在pyspark中使用类方法作为udf,会发生什么?,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,如果我定义一个Python函数并将其用于PySpark UDF,我理解会发生什么 但是,我并不完全清楚PySpark在调用实例化对象的方法时做了什么,如: class Foo: _const = 1 def f(x): return x +_const foo_object = Foo() f_udf = pyspark.functions.udf(foo_object.f) 如何将该功能带给执行者?该对象是保留在管理器上还是复制给执行者 像这样的方法调用 foo_obje
class Foo:
_const = 1
def f(x):
return x +_const
foo_object = Foo()
f_udf = pyspark.functions.udf(foo_object.f)
如何将该功能带给执行者?该对象是保留在管理器上还是复制给执行者 像这样的方法调用
foo_object.f(x)
只是语法上的糖
Foo.f(foo_object, x)
因此,有效地将方法传递给udf
与传递普通函数并没有什么不同
Spark将:
- 确定关闭
- 确定论点
- 上面计算的序列化对象以及被调用对象本身
- 把这捆东西分给工人们
传递普通函数时可能遇到的唯一问题是PySpark中使用的序列化方法无法序列化类定义。这意味着必须在所有工人的
PYTHONPATH
上显示必需的类 谢谢你的澄清!我今天从测试中实际学到的是,对象被复制到executros,其“decents”在那里独立地“活动”(即不共享类变量,甚至不更改为Foo.\u const
)。