Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Configuración de las propiedades de trabajos del intérprete de comandos de Python en AWS Glue
Un trabajo de shell de Python puede usarse para ejecutar scripts de Python como un shell en AWS Glue. Con un trabajo del intérprete de comandos de Python puede ejecutar scripts compatibles con Python 3.6 o Python 3.9.
Temas
Limitaciones
Tenga en cuenta las siguientes limitaciones de los trabajos de Python Shell:
-
No se pueden utilizar marcadores de trabajos con los trabajos de shell de Python.
-
No se puede empaquetar ninguna biblioteca de Python como archivos
.egg
en Python 3.9 y superiores. En su lugar, utilice.whl
. No se puede usar la opción
--extra-files
debido a una limitación en las copias temporales de los datos de S3.
Definición de las propiedades de trabajos de shell de Python
Estas secciones describen la definición de propiedades de trabajo en AWS Glue Studio, o mediante el CLI de AWS.
AWS Glue Studio
Al definir su trabajo de shell de Python en AWS Glue Studio, debe proporcionar algunas de las siguientes propiedades:
- Rol de IAM
-
Especifique el rol de AWS Identity and Access Management (IAM) que se usa para dar una autorización a los recursos que se utilizan para ejecutar el flujo de trabajo y obtener acceso a los almacenes de datos. Para obtener más información acerca de los permisos para ejecutar trabajos en AWS Glue, consulte Gestión de identidad y acceso para AWS Glue.
- Tipo
-
Elija Python shell (Shell de Python) para ejecutar un script de Python con el comando de trabajo llamado
pythonshell
. - Versión de Python
-
Elija la versión de Python. El valor por defecto es Python 3.9. Las versiones válidas son Python 3.6 y Python 3.9.
- Cargar bibliotecas de análisis comunes (recomendado)
-
Elija esta opción para incluir bibliotecas comunes para Python 3.9 en el shell de Python.
Si sus bibliotecas son personalizadas o entran en conflicto con las preinstaladas, puede optar por no instalar bibliotecas comunes. Sin embargo, puede instalar bibliotecas adicionales además de las bibliotecas comunes.
Si selecciona esta opción, la opción
library-set
se establece enanalytics
. Al anular la selección de esta opción, la opciónlibrary-set
se establece ennone
. - Nombre de archivo de script y ruta de script
-
El código del script define la lógica de procedimiento del trabajo. Proporcione el nombre del script y la ubicación en Amazon Simple Storage Service (Amazon S3). Compruebe que no haya un archivo con el mismo nombre que el directorio de script en la ruta. Para obtener más información acerca de cómo usar scripts, consulte Guía de programación de AWS Glue.
- Script
-
El código del script define la lógica de procedimiento del trabajo. Puede codificar el script en Python 3.6 o Python 3.9. Puede editar scripts en AWS Glue Studio.
- Unidades de procesamiento de datos
-
El número máximo de unidades de procesamiento de datos (DPU) de AWS Glue que se pueden asignar cuando se ejecute este trabajo. Una DPU es una medida relativa de la potencia de procesamiento que consta de 4 vCPU de capacidad de cómputo y 16 GB de memoria. Para más información, consulte Precios de AWS Glue
. Puede establecer el valor en 0.0625 o 1. El valor predeterminado es 0.0625. En cualquier caso, el disco local para la instancia será de 20 GB.
CLI
También puede crear un trabajo de shell de Python con la AWS CLI, como en el siguiente ejemplo.
aws glue create-job --name python-job-cli --role Glue_DefaultRole --command '{"Name" : "pythonshell", "PythonVersion": "3.9", "ScriptLocation" : "s3://DOC-EXAMPLE-BUCKET/scriptname.py"}' --max-capacity 0.0625
nota
No es necesario especificar la versión de AWS Glue ya que el parámetro --glue-version
no se aplica a los trabajos del intérprete de comandos de AWS Glue. Se ignorará cualquier versión especificada.
Trabajos que crea con el valor AWS CLI predeterminado en Python 3. Las versiones válidas de Python son 3 (que corresponden a 3.6) y 3.9. Para especificar Python 3.6, agregue esta tupla al parámetro --command
: "PythonVersion":"3"
Para especificar Python 3.9, agregue esta tupla al parámetro --command
: "PythonVersion":"3.9"
Para establecer la capacidad máxima utilizada por un trabajo de shell de Python, proporcione el parámetro --max-capacity
. En los trabajos de shell de Python, no se puede utilizar el parámetro --allocated-capacity
.
Bibliotecas compatibles con trabajos de shell de Python
En el shell de Python con Python 3.9, puede elegir el conjunto de bibliotecas para usar los conjuntos de bibliotecas preempaquetados según sus necesidades. Puede utilizar la opción library-set
para elegir el conjunto de bibliotecas. Los valores válidos son analytics
y none
.
El entorno para la ejecución de un trabajo de shell de Python admite las siguientes bibliotecas:
Versión de Python | Python 3.6 | Python 3.9 | |
---|---|---|---|
Conjunto de bibliotecas | N/D | análisis | ninguno |
avro | 1.11.0 | ||
awscli | 116.242 | 1.23.5 | 1.23.5 |
awswrangler | 2.15.1 | ||
botocore | 1.12.232 | 1.24.21 | 1.23.5 |
boto3 | 1.9.203 | 1.21.21 | |
elasticsearch | 8.2.0 | ||
numpy | 1.16.2 | 1.22.3 | |
pandas | 0.24.2 | 1.4.2 | |
psycopg2 | 2.9.3 | ||
pyathena | 2.5.3 | ||
PyGreSQL | 5.0.6 | ||
PyMySQL | 1.0.2 | ||
pyodbc | 4.0.32 | ||
pyorc | 0.6.0 | ||
redshift-connector | 2.0.907 | ||
solicitudes | 2.22.0 | 2.27.1 | |
scikit-learn | 0.20.3 | 1.0.2 | |
scipy | 1.2.1 | 1.8.0 | |
SQLAlchemy | 1.4.36 | ||
s3fs | 2.022.3.0 |
Puede utilizar la biblioteca NumPy
en un trabajo de shell de Python para cálculos científicos. Para obtener más información, consulte NumPy
import numpy as np print("Hello world") a = np.array([20,30,40,50]) print(a) b = np.arange( 4 ) print(b) c = a-b print(c) d = b**2 print(d)
Proporcionar su propia biblioteca de Python
Uso de PIP
El shell de Python que usa Python 3.9 también le permite proporcionar módulos de Python adicionales o versiones diferentes al nivel de trabajo. Puede utilizar la opción --additional-python-modules
con una lista de módulos Python separados por comas para agregar un nuevo módulo o cambiar la versión de un módulo existente. No puede proporcionar módulos de Python personalizados alojados en Amazon S3 con este parámetro al usar trabajos de intérprete de comandos de Python.
Por ejemplo, para actualizar o agregar un nuevo módulo scikit-learn
, utilice la siguiente clave y valor: "--additional-python-modules",
"scikit-learn==0.21.3"
.
AWS Glue utiliza el instalador de paquetes de Python (pip3) para instalar los módulos adicionales. Puede incluir opciones de pip3 adicionales dentro del valor --additional-python-modules
. Por ejemplo, "scikit-learn==0.21.3 -i https://pypi.python.org/simple/"
. Se aplican incompatibilidades o limitaciones de pip3.
nota
Para evitar incompatibilidades en el futuro, recomendamos usar bibliotecas creadas para Python 3.9.
Uso de un archivo Egg o Whl
Es posible que ya tenga una o varias bibliotecas de Python empaquetadas como un archivo .egg
o .whl
. En caso afirmativo, puede especificarlos en su trabajo utilizando la AWS Command Line Interface (AWS CLI) bajo la marca "--extra-py-files
", como en el siguiente ejemplo.
aws glue create-job --name python-redshift-test-cli --role
role
--command '{"Name" : "pythonshell", "ScriptLocation" : "s3://MyBucket/python/library/redshift_test.py"}' --connections Connections=connection-name
--default-arguments '{"--extra-py-files" : ["s3://DOC-EXAMPLE-BUCKET/EGG-FILE", "s3://DOC-EXAMPLE-BUCKET/WHEEL-FILE"]}'
Si no está seguro de cómo crear un archivo .egg
o .whl
desde una biblioteca de Python, siga estos pasos. Este ejemplo es aplicable en macOS, Linux y Windows Subsystem for Linux (WSL).
Para crear un archivo .egg o.whl de Python
-
Cree un clúster de Amazon Redshift en una nube virtual privada (VPC) y agregue algunos datos a una tabla.
-
Cree una conexión de AWS Glue para la combinación VPC-GrupoDeSeguridad-Subred que utilizó para crear el clúster. Compruebe que la conexión se realiza correctamente.
-
Cree un directorio llamado
redshift_example
y cree un archivo denominadosetup.py
. Pegue el siguiente código ensetup.py
.from setuptools import setup setup( name="redshift_module", version="0.1", packages=['redshift_module'] )
-
En el directorio
redshift_example
, cree un directorioredshift_module
. En el directorioredshift_module
, cree los archivos__init__.py
ypygresql_redshift_common.py
. -
Deje vacío el archivo
__init__.py
. Enpygresql_redshift_common.py
, pegue el siguiente código: Sustituyaport
,db_name
,user
, ypassword_for_user
con los detalles específicos de su clúster de Amazon Redshift. Sustituyatable_name
por el nombre de la tabla en Amazon Redshift.import pg def get_connection(host): rs_conn_string = "host=%s port=%s dbname=%s user=%s password=%s" % ( host,
port
,db_name
,user
,password_for_user
) rs_conn = pg.connect(dbname=rs_conn_string) rs_conn.query("set statement_timeout = 1200000") return rs_conn def query(con): statement = "Select * fromtable_name
;" res = con.query(statement) return res -
Si no está ya en él, cambie al directorio
redshift_example
. -
Realice una de las siguientes acciones siguientes:
Ejecute el siguiente comando para crear un archivo
.egg
.python setup.py bdist_egg
Ejecute el siguiente comando para crear un archivo
.whl
.python setup.py bdist_wheel
-
Instale las dependencias necesarias para el comando anterior.
-
El comando crea un archivo en el directorio
dist
:-
Si ha creado un archivo egg, se llamará
redshift_module-0.1-py2.7.egg
. -
Si ha creado un archivo wheel, se llamará
redshift_module-0.1-py2.7-none-any.whl
.
Cargue este archivo en Amazon S3.
En este ejemplo, la ruta del archivo cargado es
s3://DOC-EXAMPLE-BUCKET/EGG-FILE
os3://DOC-EXAMPLE-BUCKET/WHEEL-FILE
. -
-
Cree un archivo de Python que se debe usar como script para el trabajo de AWS Glue y añada el siguiente código al archivo.
from redshift_module import pygresql_redshift_common as rs_common con1 = rs_common.get_connection(
redshift_endpoint
) res = rs_common.query(con1) print "Rows in the table cities are: " print res -
Cargue el archivo anterior en Amazon S3. En este ejemplo, la ruta del archivo cargado es
s3://DOC-EXAMPLE-BUCKET/scriptname.py
. -
Cree un trabajo de shell de Python con este script. En la consola de AWS Glue, en la página Job properties (Propiedades del trabajo), especifique la ruta del archivo
.egg/.whl
en el cuadro Python library path (Ruta de la biblioteca Python). Si tiene varios archivos.egg/.whl
y archivos de Python, proporcione una lista separada por comas en este cuadro.Al modificar o cambiar el nombre de los archivos
.egg
, los nombres de archivo deben usar los nombres predeterminados generados por el comando "python setup.py bdist_egg" o deben cumplir con las convenciones de nomenclatura del módulo Python. Para obtener más información, consulte Style Guide for Python Code. Con la AWS CLI, cree un trabajo con un comando, como en el siguiente ejemplo.
aws glue create-job --name python-redshift-test-cli --role Role --command '{"Name" : "pythonshell", "ScriptLocation" : "s3://DOC-EXAMPLE-BUCKET/scriptname.py"}' --connections Connections="connection-name" --default-arguments '{"--extra-py-files" : ["s3://DOC-EXAMPLE-BUCKET/EGG-FILE", "s3://DOC-EXAMPLE-BUCKET/WHEEL-FILE"]}'
Cuando se ejecuta el trabajo, el script imprime las filas creadas en la tabla
table_name
en el clúster de Amazon Redshift.
Use AWS CloudFormation con los trabajos del intérprete de comandos de Python en AWS Glue
Puede usar AWS CloudFormation con los trabajos del intérprete de comandos de Python en AWS Glue. A continuación, se muestra un ejemplo:
AWSTemplateFormatVersion: 2010-09-09 Resources: Python39Job: Type: 'AWS::Glue::Job' Properties: Command: Name: pythonshell PythonVersion: '3.9' ScriptLocation: 's3://bucket/location' MaxRetries: 0 Name: python-39-job Role: RoleName
El grupo de Amazon CloudWatch Logs para la salida de los trabajos de shell de Python es /aws-glue/python-jobs/output
. En el caso de los errores, consulte el grupo de registros /aws-glue/python-jobs/error
.