Apache spark 如何引用通过spark submit的--py files选项提供的modules.egg文件?
我正在使用spark submit和py files选项来包括我构建的一个egg spark\u submit\u test\u lib-0.1-py2.7.egg。 结构。鸡蛋基本上是:Apache spark 如何引用通过spark submit的--py files选项提供的modules.egg文件?,apache-spark,pyspark,Apache Spark,Pyspark,我正在使用spark submit和py files选项来包括我构建的一个egg spark\u submit\u test\u lib-0.1-py2.7.egg。 结构。鸡蛋基本上是: root |- EGG-INFO |- spark_submit_test_lib |- __init__.pyc |- __init__.py |- spark_submit_test_lib.pyc |- spark_submit_test_lib.py
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\u submit\u 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中的一个文件作为驱动程序-因此,出现了类似的问题,但不相同:但在撰写本文时,没有答案。我认为这是由于-py files参数旨在提供将由服务器上的节点使用的文件spark cluster,不在驱动程序中。我相信你的python驱动程序需要是本地的。我可能是错的,但这是我所经历的,也是我对您链接的问题的最终结论。这个命令对我有效
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
太好了,谢谢你过来回答。实际上,我成功地让它工作了,并使用了我在上面写的from spark_submit_test_lib.spark_submit_test_lib import do_sum。我必须已经做了其他不正确的事情,当我试图在张贴此线程之前-不知道什么。无论如何,我很高兴地说,我现在有它的工作。