如果我在pyspark中将类方法用作udf,会发生什么情况?

时间:2018-10-08 06:18:14

标签: 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)

该功能如何带给执行者?对象是留在管理器上还是复制到执行者上?

1 个答案:

答案 0 :(得分:0)

像这样的方法调用

foo_object.f(x)

仅仅是...的语法糖

Foo.f(foo_object, x)

因此有效地将方法传递给udf与传递普通函数并没有什么不同。

火花将:

  • 确定闭合。
  • 确定参数。
  • 上面计算的序列化对象以及被调用对象本身。
  • 将此捆绑包分发给工人。

传递普通函数时可能遇到的唯一可能的难题是,PySpark中使用的序列化方法无法序列化类定义。这意味着必需的类必须出现在所有工作人员的PYTHONPATH上。