【问题标题】:how to submit pyspark job with multiple python files?如何使用多个 python 文件提交 pyspark 作业?
【发布时间】:2020-09-22 21:30:03
【问题描述】:

我正在研究如何提交使用 pycharm ide 开发的 pyspark 作业。有 4 个 python 文件,1 个 python 文件是与 pyspark 作业一起提交的主 python 文件,但其余 3 个文件导入到主 python 文件中,但我无法理解我的 python 文件是否都在 s3 bukcet 中可用,如何spark 作业将能够引用那些未使用 pyspark submit 命令提交的作业。 例如: 文件1,文件2,文件3,文件4

spark-submit --master local  --driver-memory 2g --executor-memory  2g   s3_path\file1.py

file2、file3、file4 被导入到 file1 但我想知道 spark 如何引用其他 python 文件。

【问题讨论】:

    标签: python apache-spark pyspark


    【解决方案1】:

    创建一个包(egg 文件)

    使用setuptools 将您的文件夹创建到可导入的包中。 假设您在文件夹 mypackage 下有多个文件,如下所示:

    mypackage
    |-- file1.py
    |-- file2.py
    |-- ...
    `-- __init__.py
    
    

    使用setuptools,您可以创建一个egg文件(这是一种压缩版本的包)

    egg 文件传递​​给spark-submit

    spark-submit --pyfiles mypackage.egg <rest of the args>

    在 Spark 应用程序中导入包的内容

    
    from mypackage.file1 import somefunction
    somefunction()
    

    这里还有一件更重要的事情,如果您有权访问/能够 pip 安装东西,那么不要使用 egg 创建一个 wheel 文件并运行 pip install s3_path/<wheel-file>,它将安装包并复制您的可运行脚本到/usr/local/bin/ 或等效路径,立即让您的生活更轻松。

    【讨论】:

    • 如果我没有 init.py ,只有 file1,file2,file3 并且我已经装箱了 mypackage.egg 但我的 sparkcontext 在 file1 中定义,这是入口点对于 spark ,所以在这种情况下使用 spark submit 提交 egg 文件 spark 怎么知道哪个是 spark context 的入口文件。
    【解决方案2】:

    请使用以下配置

    --py-files PY_FILES         Comma-separated list of .zip, .egg, or .py files to place
                                on the PYTHONPATH for Python apps.
    

    所以你的命令如下所示

    spark-submit --master local  --driver-memory 2g --executor-memory  2g --py-files s3_path\file2.py,s3_path\file3.py,s3_path\file4.py  s3_path\file1.py
    

    一个重要的注意事项是文件路径之间不要有空格

    【讨论】:

    • 感谢您回答问题,除了 python 文件,我还有一个配置文件,file1.py 将读取该文件,我该如何传递该配置文件。配置文件是 text/ini 文件。
    • 您能提供最小可重现的例子吗?首先,虽然我有:您可以将 text/ini 包装在 str 变量中并插入新的 .py 文件中吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多