我有一个存档(基本上是捆绑的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] 删除。
我来说两句