如何引用通过spark-submit的--py-files选项提供的模块.egg文件?

时间:2016-10-11 07:54:50

标签: apache-spark pyspark

我正在使用spark-submit py-files选项来包含我已经构建的鸡蛋(spark_submit_test_lib-0.1-py2.7.egg)。 该.egg的结构基本上是:

root
|- EGG-INFO
|- spark_submit_test_lib
     |- __init__.pyc
     |- __init__.py
     |- spark_submit_test_lib.pyc
     |- spark_submit_test_lib.py
         |- def do_sum()

在我的驱动程序脚本spark_submit_test.py中我有这个导入:

from spark_submit_test_lib import do_sum

我使用以下方式提交给我的hadoop群集:

spark-submit --queue 'myqueue' --py-files spark_submit_test_lib-0.1-py2.7.egg --deploy-mode cluster --master yarn spark_submit_test.py

失败并出现错误:

ImportError: No module named spark_submit_test_lib

我尝试将导入语句更改为

from spark_submit_test_lib.spark_submit_test_lib import do_sum

但无济于事,仍然得到同样的错误。

我发现某人有类似的问题(在这种情况下,他/她希望spark-submit使用.egg中的文件作为驱动程序 - 所以类似的问题但不一样):What filepath or dot notation should I use when using spark-submit.py with .egg files as an argument to --py-files但是在撰写本文时,没有答案。

2 个答案:

答案 0 :(得分:0)

此命令适用于我

spark2-submit --master yarn \
            --driver-memory 20g \
            --num-executors 50 \
            --executor-cores 1 \
            --deploy-mode client \
            --jars spark-avro_2.11-3.2.0.jar \
            --py-files spark_submit_test_lib-0.1-py2.7.egg \
            driver.py 

答案 1 :(得分:-1)

我认为这是因为--py-files参数旨在提供将由spark集群上的节点使用的文件,而不是驱动程序中的节点。我相信你的驱动程序python程序需要是本地的。我可能错了,但这是我所经历的,也是我对你所关联问题的最终结论。