Pyspark:从档案内部运行脚本

纪尧姆

我有一个存档(基本上是捆绑的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位于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脚本spark-submit

但是您可以使用非常简短的脚本,并用于--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接受参数的泛型,告诉其要导入和运行的模块和方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章