Python Pyspark:从存档内部运行脚本
我有一个存档(基本上是捆绑的conda环境+我的应用程序),我可以在主模式下轻松使用pyspark:Python Pyspark:从存档内部运行脚本,python,pyspark,yarn,Python,Pyspark,Yarn,我有一个存档(基本上是捆绑的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#p
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不存在
我当然可以先把它提取出来,单独放在hdfs上。。。有一些变通方法,但由于我把所有东西都放在一个好地方,我很乐意使用它
如果相关的话,这是CDH上的spark 2.4.0和python 3.7。据我所知,您不能:您必须向spark submit提供python脚本 但是您可以使用一个非常短的脚本,并使用
--py files
分发剩余代码的ZIP或EGG:
# go.py
from my.app import run
run()
您可以创建一个包含“我的目录”的ZIP文件,并使用简短的入口点脚本提交该文件:spark submit--py files my.ZIP go.py
如果愿意,您可以创建一个通用的go.py
,它接受告诉它要导入和运行哪个模块和方法的参数
# my/app.py
def run():
print("hello")