#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?