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



我使用spark-submitpy-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程序需要是本地的。我可能错了,但这就是我的经历,也是我对你所链接的问题的最终结论。

最新更新