我使用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
我尝试将import语句更改为
from spark_submit_test_lib.spark_submit_test_lib import do_sum
但是无效,仍然得到相同的错误。
我看到有人有一个类似的问题(在这种情况下,他/她希望spark-submit使用。egg文件中的文件作为驱动程序-所以一个类似的问题,但不相同):当使用spark-submit.py与。egg文件作为参数时,我应该使用什么文件路径或点符号,但在撰写时没有答案
这个命令对我有效
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
我认为这是由于——py-files参数意味着提供将由spark集群上的节点使用的文件,而不是在您的驱动程序中。我相信你的驱动python程序需要是本地的。我可能错了,但这就是我的经历,也是我对你所链接的问题的最终结论。