【问题标题】:Pyspark: run a script from inside the archivePyspark:从存档内部运行脚本
【发布时间】:2020-10-07 10:28:11
【问题描述】:

我有一个存档(基本上是一个捆绑的 conda 环境 + 我的应用程序),我可以在 yarn master 模式下轻松地与 pyspark 一起使用:

PYSPARK_PYTHON=./pkg/venv/bin/python3 \ 
spark-submit \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./pkg/venv/bin/python3 \
--master yarn \
--deploy-mode cluster \
--archives hdfs:///package.tgz#pkg \
app/MyScript.py

这按预期工作,这不足为奇。

如果 MyScript.py 在 inside package.tgz 中,我该如何运行它。不在我的本地文件系统上?

我想用例如替换我的命令的最后一行。 ./pkg/app/MyScript.py 但随后 spark 抱怨:java.io.FileNotFoundException: File file:/home/blah/pkg/app/MyScript.py does not exist

我当然可以先提取它,将它单独放在 hdfs 上...有一些解决方法,但由于我将所有东西都放在一个不错的地方,我很想使用它。

如果相关,这是 CDH 上的 spark 2.4.0、python 3.7。

【问题讨论】:

    标签: python pyspark hadoop-yarn


    【解决方案1】:

    据我了解,您不能:您必须向 spark-submit 提供 Python 脚本。

    但是您可以有一个非常短的脚本并使用--py-files 来分发其余代码的 ZIP 或 EGG:

    # go.py
    
    from my.app import run
    
    run()
    
    # my/app.py
    
    def run():
      print("hello")
    

    您可以创建一个包含 my 目录的 ZIP 文件并使用简短的入口点脚本提交:spark-submit --py-files my.zip go.py

    如果你愿意,你可以创建一个通用的go.py,它接受参数告诉它要导入和运行哪个模块和方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      相关资源
      最近更新 更多