¿Cómo puedo solucionar «ImportError: No hay ningún módulo llamado» en AWS Glue?

3 minutos de lectura
0

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?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años