Я хотел бы использовать Pyspark и распространять набор зависимостей в кластере без целевого доступа rnet. Я попытался pip install -t dependencies -r requirements.txt
, а затем заархивировал папку с зависимостями. Я передал zip как spark.submit.pyFiles
, и он работает, , за исключением случаев, когда модуль содержит .so файлы внутри (например, numpy). В этом случае я получаю эту ошибку . Я получаю точно такую же ошибку, если открываю локальную консоль fre sh python после указания PYTHONPATH на zip-файл: похоже, он может найти пакеты python, за исключением файлов .so, поэтому он на самом деле не связан pyspark но общий python механизм загрузки пакетов из zip-файла. Если я разархивирую файл и укажу PYTHONPATH на разархивированную папку, все будет хорошо.
Я прочитал этот ответ , поэтому я попробовал вместо этого файлы egg, с тем же результатом: после установки pip в В целевой папке зависимостей я создаю один файл egg, как упомянуто там, с помощью setuptools, сначала создав файл setup.py в папке зависимостей, например:
from setuptools import setup, find_packages
setup(
name = "dependencies",
version = "0.1",
packages = find_packages()
)
, а затем вызвав python setup.py bdist_egg
. Я распространяю полученный файл .egg в аргументе pyFiles, но с той же ошибкой. Я попытался создать файл native_libs.txt
, в котором я вручную записал путь к файлам .so, которые находятся внутри подпапки numpy / core, но, похоже, не работает, когда я запускаю команду bdist: .so не копируются в numpy подпапка с яйцом, поэтому я их вручную скопировал туда, но безуспешно. Указал PYTHONPATH на файл яйца, но получил точно такую же ошибку.
Моя python версия 3.7.6, когда я создаю яйцо, и 3.7.7 в рабочих Spark, но я почти уверен, что это не вызывает проблемы.
Есть ли способ сделать это sh? Может быть, использовать другой аргумент искры, отличный от pyFiles?
Спасибо
Примечание: этот билет JIRA также связан с этим вопросом.