Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pyspark:从存档内部运行脚本_Python_Pyspark_Yarn - Fatal编程技术网

Python 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

我有一个存档(基本上是捆绑的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中,我如何运行它呢。不在我的本地文件系统上

我想用例如
/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")