Отправить проект Python в Datapro c job - PullRequest
3 голосов
/ 23 апреля 2020

У меня есть проект python, папка которого имеет структуру

main_directory - lib - lib.py
               - run - script.py

script.py равно

from lib.lib import add_two
spark = SparkSession \
    .builder \
    .master('yarn') \
    .appName('script') \
    .getOrCreate()

print(add_two(1,2))

, а lib.py равно

def add_two(x,y):
    return x+y

Я хочу запустить в качестве задания Datapro c в GCP. Я проверил онлайн, но я не очень хорошо понял, как это сделать. Я пытаюсь запустить скрипт с

gcloud dataproc jobs submit pyspark --cluster=$CLUSTER_NAME --region=$REGION \
  run/script.py

Но я получаю следующее сообщение об ошибке:

from lib.lib import add_two
ModuleNotFoundError: No module named 'lib.lib'

Не могли бы вы помочь мне с тем, как я должен выполнить запуск работы в Datapro c? Единственный способ сделать это - удалить абсолютный путь, изменив это значение на script.py:

 from lib import add_two

и запустить задание как

gcloud dataproc jobs submit pyspark --cluster=$CLUSTER_NAME --region=$REGION \
  --files /lib/lib.py \
  /run/script.py

Однако Я хотел бы избежать утомительного процесса, чтобы каждый раз перечислять файлы вручную.

По предложению @Igor, чтобы упаковать в zip-файл, я обнаружил, что

zip -j --update -r libpack.zip /projectfolder/* && spark-submit --py-files libpack.zip /projectfolder/run/script.py

работает. Однако это помещает все файлы в одну папку root в libpack.zip, поэтому, если в подпапках есть файлы с одинаковыми именами, это не будет работать.

Есть предложения?

1 Ответ

0 голосов
/ 28 апреля 2020

Если вы хотите сохранить структуру проекта при отправке задания Dataro c, вам следует упаковать свой проект в файл .zip и указать его в параметре --py-files при отправке задания:

gcloud dataproc jobs submit pyspark --cluster=$CLUSTER_NAME --region=$REGION \
  --py-files lib.zip \
  run/script.py

Чтобы создать zip-архив, вам нужно запустить скрипт:

cd main_directory/
zip -x run/script.py -r libs.zip .

Обратитесь к этому сообщению в блоге для получения дополнительной информации о том, как упаковать зависимости в zip-архиве для PySpark рабочие места.

...