我正在使用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但是在撰写本文时,没有答案。
答案 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程序需要是本地的。我可能错了,但这是我所经历的,也是我对你所关联问题的最终结论。