Это не решает более тонкие проблемы модулей, которые имеют определенные привязки 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?

Ответы на вопрос(2)

Ваш ответ на вопрос