¿Cómo puedo solucionar «ImportError: No hay ningún módulo llamado» en AWS Glue?
Cuando intento importar módulos o paquetes adicionales mediante el shell de Python de AWS Glue, se muestra la respuesta «ImportError: No hay ningún módulo llamado». Por ejemplo: ImportError: No hay ningún módulo llamado pyarrow.compat
Descripción breve
El shell de Python en AWS Glue utiliza archivos .egg y .whl. Python puede importar datos directamente desde un archivo .egg o .whl. Para preservar la compatibilidad, asegúrese de que en el entorno de compilación local se utilice la misma versión de Python que en el trabajo de shell de Python. Por ejemplo, si compila un archivo .egg con Python 3, utilice Python 3 para el trabajo de shell de Python en AWS Glue.
Nota: A partir del 1 de junio de 2022, los trabajos de shell de Python solo admiten Python 3. Para obtener más información, consulte Política de compatibilidad de versiones de AWS Glue.
Resolución
1. Cree el archivo setup.py y añada el parámetro install_requires para obtener una lista de los módulos que desea importar:
from setuptools import setup setup( name="redshift_module", version="0.1", packages=['redshift_module'], install_requires=['pyarrow','pandas','numpy','fastparquet'] )
2. Cree una carpeta llamada reshift_module en el directorio actual:
$ mkdir redshift_module
A continuación, instale los paquetes:
$ python setup.py develop
Ejemplo de resultado:
running develop running egg_info writing requirements to redshift_module.egg-info/requires.txt writing redshift_module.egg-info/PKG-INFO writing top-level names to redshift_module.egg-info/top_level.txt writing dependency_links to redshift_module.egg-info/dependency_links.txt reading manifest file 'redshift_module.egg-info/SOURCES.txt' writing manifest file 'redshift_module.egg-info/SOURCES.txt' running build_ext Creating /usr/local/lib/python3.6/site-packages/redshift-module.egg-link (link to .) redshift-module 0.1 is already the active version in easy-install.pth Using /Users/test/Library/Python/3.6/lib/python/site-packages Searching for pandas==0.24.2 Best match: pandas 0.24.2 Adding pandas 0.24.2 to easy-install.pth file Using /usr/local/lib/python3.6/site-packages Searching for pyarrow==0.12.1 Best match: pyarrow 0.12.1 Adding pyarrow 0.12.1 to easy-install.pth file Installing plasma_store script to /usr/local/bin
3. Lleve a cabo una de las siguientes acciones:
Cree un archivo .egg:
python setup.py bdist_egg
Cree un archivo .whl:
python setup.py bdist_wheel
5. Copie el archivo .egg o .whl desde la carpeta dist en un bucket de Amazon Simple Storage Service (Amazon S3). Para obtener más información, consulte Proporcionar su propia biblioteca de Python. Ejemplo:
dist aws s3 cp MOA_EDM_cdc_controller_g2-0.2.9-py3-none-any.whl s3://doc-example-bucket/glue-libs/python-shell-jobs/ upload: ./MOA_EDM_cdc_controller_g2-0.2.9-py3-none-any.whl to s3://doc-example-bucket/glue-libs/python-shell-jobs/MOA_EDM_cdc_controller_g2-0.2.9-py3-none-any.whl
Nota: Si recibe errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de utilizar la versión más reciente de AWS CLI.
6. Ahora el módulo está instalado en su trabajo de shell de Python. Para confirmarlo, compruebe el grupo de Registros de Amazon CloudWatch para trabajos de shell de Python (/aws-glue/python-jobs/output). He aquí un ejemplo de un resultado correcto:
Searching for pyarrow Reading https://pypi.python.org/simple/pyarrow/ Downloading https://files.pythonhosted.org/packages/fe/3b/267c0fdb3dc5ad7989417cfb447fbcbec008bafc1bb26d4f0221c5e4e508/pyarrow-0.12.1-cp27-cp27mu-manylinux1_x86_64.whl#sha256=63170571cccaf0bf01a1d30eacc4d9274bd5c4f448c2b5b1a4ddc125952f4284 Best match: pyarrow 0.12.1 Processing pyarrow-0.12.1-cp27-cp27mu-manylinux1_x86_64.whl Installing pyarrow-0.12.1-cp27-cp27mu-manylinux1_x86_64.whl to /glue/lib/installation writing requirements to /glue/lib/installation/pyarrow-0.12.1-py3.6-linux-x86_64.egg/EGG-INFO/requires.txt Adding pyarrow 0.12.1 to easy-install.pth file Installing plasma_store script to /glue/lib/installation Installed /glue/lib/installation/pyarrow-0.12.1-py3.6-linux-x86_64.egg
Información relacionada
¿Cómo puedo utilizar bibliotecas externas de Python en mi trabajo de ETL de AWS Glue 1.0 o 0.9?
¿Cómo puedo utilizar bibliotecas externas de Python en mi trabajo de ETL de AWS Glue 2.0?
Contenido relevante
- OFICIAL DE AWSActualizada hace 9 meses
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 2 años