Pyspark:从存档内部运行脚本



我有一个存档(基本上是一个捆绑的conda环境+我的应用程序(,我可以在纱线主模式下轻松与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而不是在我的本地文件系统上,我该如何运行它?

我想用 eg 替换命令的最后一行。./pkg/app/MyScript.py但随后火花抱怨: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,该接受参数,告诉它要导入和运行哪个模块和方法。

相关内容

  • 没有找到相关文章

最新更新