我了解如果定义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)
该功能如何带给执行者?对象是留在管理器上还是复制到执行者上?
答案 0 :(得分:0)
像这样的方法调用
foo_object.f(x)
仅仅是...的语法糖
Foo.f(foo_object, x)
因此有效地将方法传递给udf
与传递普通函数并没有什么不同。
火花将:
传递普通函数时可能遇到的唯一可能的难题是,PySpark中使用的序列化方法无法序列化类定义。这意味着必需的类必须出现在所有工作人员的PYTHONPATH
上。