pyspark.sql.functions.udf可以将.py模块分发给工作节点吗?

时间:2017-02-24 14:55:01

标签: python sql apache-spark udf

我使用pt_PT定义一个UDF,它使用从我编写的.py模块导入的类。

pyspark.sql.functions.udf

当我打电话

from czech_simple_stemmer import CzechSimpleStemmer #this is my class in my module
from pyspark.sql.functions import udf
from pyspark.sql.types import StringType
...some code here...

def clean_one_raw_doc(my_raw_doc):
    ... calls something from CzechSimpleStemmer ...

udf_clean_one_raw_doc = udf(clean_one_raw_doc, StringType())

我收到一条典型的巨大错误消息,其中可能是相关部分:

df = spark.sql("SELECT * FROM mytable").withColumn("output_text", udf_clean_one_raw_doc("input_text"))

我是否正确理解pyspark将File "/data2/hadoop/yarn/local/usercache/ja063930/appcache/application_1472572954011_132777/container_e23_1472572954011_132777_01_000003/pyspark.zip/pyspark/serializers.py", line 431, in loads return pickle.loads(obj, encoding=encoding) ImportError: No module named 'czech_simple_stemmer' 分发给所有工作节点,但节点的python安装中缺少udf_clean_one_raw_doc(仅存在于我运行spark驱动程序的边缘节点上) )?

如果是的话,有什么方法可以告诉pyspark分发这个模块吗?我想我可以手动复制czech_simple_stemmer.py到所有节点的蟒蛇,但1)我没有管理员访问节点,2)即使我求管理员把它放在那里,他做到了,如果我需要对模块进行一些调整,他可能会杀了我。

2 个答案:

答案 0 :(得分:0)

来自spark-submit documentation

  

对于Python,您可以使用spark-submit的--py-files参数进行添加   .py,.zip或.egg文件将随您的应用程序一起分发。如果   你依赖多个Python文件,我们建议将它们打包成一个   .zip或.egg。

答案 1 :(得分:0)

SparkContext.addPyFile(“my_module.py”)会这样做。