Ответ 1
Оказалось, что, поскольку я отправляю свое приложение в режиме клиента, тогда машина, на которой я запускаю команду spark-submit
, запускает программу драйвера и будет нуждаться в доступе к файлам модулей.
Я добавил свой модуль к переменной среды PYTHONPATH
на узле, в котором я отправляю свою работу, добавив следующую строку в мой .bashrc
файл (или выполнив его перед отправкой моей работы).
export PYTHONPATH=$PYTHONPATH:/home/welshamy/modules
И это решило проблему. Поскольку путь находится на узле драйвера, мне не нужно застегивать и отправлять модуль с помощью --py-files
или использовать sc.addPyFile()
.
Ключом к решению любой проблемы с ошибкой импорта модуля pyspark является понимание того, нужны ли драйверу или рабочему (или обоим) узлам файлы модулей.
Важно. Если рабочим узлам нужны файлы вашего модуля, вам необходимо передать его в виде zip-архива с --py-files
и этот аргумент должен предшествовать аргументу.py файла. Например, обратите внимание на порядок аргументов в этих примерах:
Это верно:
./bin/spark-submit --py-files wesam.zip mycode.py
это не правильно:
./bin/spark-submit mycode.py --py-files wesam.zip