Pyspark распространяет зависимости с файлами .so в кластере без интернета - PullRequest
0 голосов
/ 08 апреля 2020

Я хотел бы использовать 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 также связан с этим вопросом.

...