Pyspark: запустить скрипт из архива - PullRequest
1 голос
/ 17 июня 2020

У меня есть архив (в основном связанная среда 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 does not exist.

Я, конечно, мог бы сначала извлечь его, поместить отдельно на hdfs ... Есть обходные пути, но так как у меня все есть в одном красивом месте, мне бы очень хотелось для его использования.

Если актуально, это Spark 2.4.0, python 3.7, на CDH.

1 Ответ

1 голос
/ 18 июня 2020

Насколько я понимаю, вы не можете: вы должны предоставить сценарий Python для spark-submit.

Но вы можете иметь очень короткий сценарий и использовать --py-files для распространения ZIP или EGG остальная часть вашего кода:

# go.py

from my.app import run

run()
# my/app.py

def run():
  print("hello")

Вы можете создать ZIP-файл, содержащий каталог my, и отправить его с помощью сценария короткой точки входа: spark-submit --py-files my.zip go.py

Если хотите , вы можете создать общий c go.py, который принимает аргументы, сообщающие ему, какой модуль и метод нужно импортировать и запустить.

...