Это не решает более тонкие проблемы модулей, которые имеют определенные привязки C. Хотя в статье упоминается numpy (одна из этих специальных библиотек), она не имеет отношения к оператору ImportError, который испытывает.
аюсь запустить работу PySpark, которая зависит от определенных библиотек python3. Я знаю, что могу установить эти библиотеки в Spark Cluster, но, поскольку я повторно использую кластер для нескольких заданий, я бы предпочел объединить все зависимости и передать их каждому заданию через--py-files
директивы.
Для этого я использую:
pip3 install -r requirements.txt --target ./build/dependencies
cd ./build/dependencies
zip -qrm . ../dependencies.zip
Который эффективно архивирует весь код из необходимых пакетов для использования на корневом уровне.
В моемmain.py
Я могу импортировать зависимости
if os.path.exists('dependencies.zip'):
sys.path.insert(0, 'dependencies.zip')
А также добавьте .zip в мой Spark Context
sc.addPyFile('dependencies.zip')
Все идет нормально.
Но по какой-то причине это превратится в какой-то ад зависимостей от Spark Cluster
Например, бег
spark-submit --py-files dependencies.zip main.py
В которойmain.py
(или класс) Я хочу использовать панду. Код, который вызовет эту ошибку:
Traceback (последний вызов был последним):
Файл "/Users/tomlous/Development/Python/enrichers/build/main.py", строка 53, в job_module = importlib.import_module ('spark.jobs.% S'% args.job_name) ...
Файл "", строка 978, в _gcd_import
Файл "", строка 961, в _find_and_load
Файл "", строка 950, в _find_and_load_unlocked
Файл "", строка 646, в _load_unlocked
Файл "", строка 616, в _load_backward_compatible
Файл "dependencies.zip/spark/jobs/classify_existence.py", строка 9, в
Файл "dependencies.zip/enrich/existence.py", строка 3, в
Файл "dependencies.zip/pandas/в этом.py ", строка 19, в
ImportError: отсутствуют обязательные зависимости ['numpy']
Глядя на панды__init__.py
Я вижу что-то вроде__import__(numpy)
Поэтому я предполагаю, что NumPy не загружен.
Но если я изменю свой код для явного вызова numpy-функций, он на самом деле находит numpy, но не некоторые из его зависимостей
import numpy as np
a = np.array([1, 2, 3])
Код возвращается
Traceback (последний вызов был последним):
Файл "dependencies.zip/numpy/core/в этом.py ", строка 16, в
ImportError: невозможно импортировать имя 'multiarray'
Итак, мой вопрос:
Как мне связать библиотеки python3 с моей работой spark таким образом, чтобы мне не пришлось pip3 устанавливать все возможные библиотеки в кластере Spark?