La agrupación de paquetes Python3 para PySpark resulta en importaciones faltantes

Estoy tratando de ejecutar un trabajo de PySpark que depende de ciertas bibliotecas de python3. Sé que puedo instalar estas bibliotecas en el Spark Cluster, pero como estoy reutilizando el clúster para varios trabajos, me gustaría agrupar todas las dependencias y pasarlas a cada trabajo a través del--py-files directiva.

Para hacer esto uso:

pip3 install -r requirements.txt --target ./build/dependencies
cd ./build/dependencies
zip -qrm . ../dependencies.zip

Que efectivamente comprime todo el código de los paquetes requeridos para ser utilizado a nivel raíz.

En mimain.py Puedo importar las dependencias

if os.path.exists('dependencies.zip'):
    sys.path.insert(0, 'dependencies.zip')

Y también agregue el .zip a mi contexto de chispa

sc.addPyFile('dependencies.zip')

Hasta aquí todo bien.

Pero por alguna razón, esto se convertirá en una especie de dependencia del infierno en el Spark Cluster

Ej. Correr

spark-submit --py-files dependencies.zip main.py

Donde enmain.py (o clase) Quiero usar un panda. El código activará este error:

Rastreo (llamadas recientes más última):

Archivo "/Users/tomlous/Development/Python/enrichers/build/main.py", línea 53, en job_module = importlib.import_module ('spark.jobs.% S'% args.job_name) ...

Archivo "", línea 978, en _gcd_import

Archivo "", línea 961, en _find_and_load

Archivo "", línea 950, en _find_and_load_unlocked

Archivo "", línea 646, en _load_unlocked

Archivo "", línea 616, en _load_backward_compatible

Archivo "dependencies.zip/spark/jobs/classify_existence.py", línea 9, en

Archivo "dependencies.zip/enrich/existence.py", línea 3, en

Archivo "dependencies.zip/pandas/en eso.py ", línea 19, en

ImportError: faltan dependencias requeridas ['numpy']

Mirando a los pandas__init__.py Veo algo como__import__(numpy)

Así que supongo que numpy no está cargado.

Pero si cambio mi código para llamar explícitamente a funciones numpy, en realidad se encuentra numpy, pero no algunas de sus dependencias

import numpy as np
a = np.array([1, 2, 3])

El código vuelve

Rastreo (llamadas recientes más última):

Archivo "dependencies.zip/numpy/core/en eso.py ", línea 16, en

ImportError: no se puede importar el nombre 'multiarray'

Entonces mi pregunta es:

¿Cómo debo agrupar las bibliotecas de python3 con mi trabajo de modo que no tenga que instalar pip3 todas las bibliotecas posibles en un clúster de Spark?

Respuestas a la pregunta(2)

Su respuesta a la pregunta