Pyspark:运行 存档中的脚本
Pyspark: run a script from inside the archive
我有一个存档(基本上是捆绑的 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。
据我了解,您不能:您必须向 spark-submit
提供 Python 脚本。
但是您可以使用一个非常短的脚本并使用 --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
来接受参数,告诉它要导入哪个模块和方法以及 运行.
我有一个存档(基本上是捆绑的 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。
据我了解,您不能:您必须向 spark-submit
提供 Python 脚本。
但是您可以使用一个非常短的脚本并使用 --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
来接受参数,告诉它要导入哪个模块和方法以及 运行.