Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果在pyspark中使用类方法作为udf,会发生什么?_Python_Apache Spark_Pyspark - Fatal编程技术网

Python 如果在pyspark中使用类方法作为udf,会发生什么?

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

如果我定义一个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_object.f(x)
只是语法上的糖

Foo.f(foo_object, x)
因此,有效地将方法传递给
udf
与传递普通函数并没有什么不同

Spark将:

  • 确定关闭
  • 确定论点
  • 上面计算的序列化对象以及被调用对象本身
  • 把这捆东西分给工人们

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

谢谢你的澄清!我今天从测试中实际学到的是,对象被复制到executros,其“decents”在那里独立地“活动”(即不共享类变量,甚至不更改为
Foo.\u const
)。