Apache spark 如何引用通过spark submit的--py files选项提供的modules.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

我正在使用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
         |- 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。我必须已经做了其他不正确的事情,当我试图在张贴此线程之前-不知道什么。无论如何,我很高兴地说,我现在有它的工作。