[英]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
但隨后火花抱怨: 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 的 rest:
# 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
,它接受 arguments 告訴它要導入和運行哪個模塊和方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.