как отправить задание pyspark с несколькими файлами python?

#python #apache-spark #pyspark

#python #apache-spark #pyspark

Вопрос:

Я выясняю, как отправить задание pyspark, разработанное с использованием pycharm ide. существует 4 файла python, и 1 файл python является основным файлом python, который отправляется с заданием pyspark, но остальные 3 файла импортируются в основной файл python, но я не могу понять, доступны ли все мои файлы python в s3 bukcet, как spark job сможет ссылаться на те, которые не были отправленыс помощью команды отправки pyspark . например: file1, file2, file3, file4

 spark-submit --master local  --driver-memory 2g --executor-memory  2g   s3_pathfile1.py
  

file2, file3, file4 импортируются в file1, но мне интересно, как spark может ссылаться на другие файлы python.

Ответ №1:

Создайте пакет ( egg файл)

С помощью setuptools создайте свою папку в импортируемом пакете. Допустим, у вас есть несколько файлов в папке mypackage , подобной следующей:

 mypackage
|-- file1.py
|-- file2.py
|-- ...
`-- __init__.py

  

Используя setuptools вы можете создать файл egg (это своего рода архивированная версия пакета)

Передайте egg файл в spark-submit

spark-submit --pyfiles mypackage.egg <rest of the args>

Импортируйте содержимое вашего пакета в приложение Spark

 
from mypackage.file1 import somefunction
somefunction()
  

Здесь есть еще одна важная вещь: если у вас есть доступ / возможность устанавливать pip, то вместо использования egg create a wheel file и run pip install s3_path/<wheel-file> он установит пакет и скопирует ваши запускаемые скрипты в /usr/local/bin/ или эквивалентный путь, что мгновенно упростит вашу жизнь.

Комментарии:

1. если у меня нет init.py , и только file1, file2, file3, и я создал mypackage.egg , но мой sparkcontext определен в file1, и это точка входа для spark, поэтому отправка файла egg с помощью spark submit в этом случае, как spark узнает, какой из них является файлом ввода для контекста spark.

Ответ №2:

Пожалуйста, используйте приведенную ниже конфигурацию

 --py-files PY_FILES         Comma-separated list of .zip, .egg, or .py files to place
                            on the PYTHONPATH for Python apps.
  

Итак, ваша команда будет выглядеть следующим образом

 spark-submit --master local  --driver-memory 2g --executor-memory  2g --py-files s3_pathfile2.py,s3_pathfile3.py,s3_pathfile4.py  s3_pathfile1.py
  

Одним из важных замечаний является отсутствие пробелов между путями к файлам

Комментарии:

1. спасибо за ответ на вопрос, вместе с файлами python у меня также есть один файл конфигурации, который будет прочитан file1.py , как я могу передать этот конфигурационный файл тоже. конфигурационный файл представляет собой текстовый / ini-файл.

2. Не могли бы вы предоставить минимальный воспроизводимый пример? Первое, что у меня есть: можете ли вы обернуть текст / ini в переменную str и вставить в новый файл .py?