Utilisation des bibliothèques Python avec AWS Glue - AWS Glue

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation des bibliothèques Python avec AWS Glue

AWS Glue vous permet d'installer des modules et des bibliothèques Python supplémentaires à utiliser avec ETL AWS Glue.

Installation de modules Python supplémentaires dans AWS Glue 2.0 et versions ultérieures avec pip

AWS Glue utilise Python Package Installer (pip3) pour installer des modules supplémentaires qu'ETL AWS Glue utilisera. Vous pouvez utiliser le paramètre --additional-python-modules avec une liste de modules Python séparés par des virgules pour ajouter un nouveau module ou modifier la version d'un module existant. Vous pouvez installer des distributions personnalisées d'une bibliothèque en chargeant la distribution sur Amazon S3, puis en incluant le chemin d'accès à l'objet Amazon S3 dans votre liste de modules.

Vous pouvez transmettre des options supplémentaires à pip3 à l'aide du paramètre --python-modules-installer-option. Par exemple, vous pouvez transmettre "--upgrade" pour mettre à niveau les packages spécifiés par "--additional-python-modules". Pour plus d'exemples, voir Création de modules Python à partir d'une roue pour les charges de travail Spark ETL à l'aide de AWS Glue 2.0.

Si vos dépendances Python dépendent de manière transitive d'un code natif compilé, vous risquez de vous heurter à la limitation suivante : AWS Glue ne prend pas en charge la compilation de code natif dans l'environnement de travail. Cependant, les tâches AWS Glue s'exécutent dans un environnement Amazon Linux 2. Vous pouvez peut-être fournir vos dépendances natives sous une forme compilée via un élément distribuable Wheel.

Par exemple, pour mettre à jour ou ajouter un nouveau module scikit-learn, utilisez la clé/valeur suivante : "--additional-python-modules", "scikit-learn==0.21.3".

En outre, l'option --additional-python-modules vous permet de spécifier un chemin d'accès Amazon S3 vers un module de roue Python. Par exemple :

--additional-python-modules s3://aws-glue-native-spark/tests/j4.2/ephem-3.7.7.1-cp37-cp37m-linux_x86_64.whl,s3://aws-glue-native-spark/tests/j4.2/fbprophet-0.6-py3-none-any.whl,scikit-learn==0.21.3

Vous le spécifiez --additional-python-modules dans le champ Paramètres du job de la AWS Glue console ou en modifiant les arguments du job dans le AWS SDK. Pour de plus amples informations sur la définition des paramètres de la tâche, consultez Paramètres des tâches AWS Glue.

Y compris des fichiers Python dotés de fonctionnalités PySpark natives

AWS Glueutilise PySpark pour inclure des fichiers Python dans les tâches AWS Glue ETL. Vous aurez envie d'utiliser --additional-python-modules pour gérer vos dépendances lorsqu'elles sont disponibles. Vous pouvez utiliser le paramètre de tâche --extra-py-files pour inclure des fichiers Python. Les dépendances doivent être hébergées dans Amazon S3, et la valeur de l'argument doit être une liste de chemins non-espacés Amazon S3 délimités par des virgules. Cette fonctionnalité se comporte comme la gestion des dépendances Python que vous utiliseriez avec Spark. Pour plus d'informations sur la gestion des dépendances Python dans Spark, consultez la page Utilisation des fonctionnalités PySpark natives dans la documentation d'Apache Spark. --extra-py-filesest utile dans les cas où votre code supplémentaire n'est pas empaqueté ou lorsque vous migrez un programme Spark avec une chaîne d'outils existante pour gérer les dépendances. Pour que vos outils de dépendance soient gérables, vous devez regrouper vos dépendances avant de les soumettre.

Scripts de programmation utilisant des transformations visuelles

Lorsque vous créez une tâche AWS Glue à l'aide de l'interface visuelle de AWS Glue Studio, vous pouvez transformer vos données à l'aide de nœuds de transformation de données gérés et de transformations visuelles personnalisées. Pour plus d'informations sur les nœuds de transformation de données gérés, consultezModification de nœuds de transformation de données gérées par AWS Glue. Pour plus d'informations sur les transformations visuelles personnalisées, consultezTransformations visuelles personnalisées AWS Glue. Les scripts utilisant des transformations visuelles ne peuvent être générés que lorsque le langage de votre travail est configuré pour utiliser Python.

Lors de la génération d'une tâche AWS Glue à l'aide de transformations visuelles, AWS Glue Studio inclut ces transformations dans l'environnement d'exécution en utilisant le --extra-py-files paramètre de configuration de la tâche. Pour de plus amples informations sur la définition des paramètres de la tâche, consultez Paramètres des tâches AWS Glue. Lorsque vous apportez des modifications à un script généré ou à un environnement d'exécution, vous devez conserver cette configuration de tâche pour que votre script s'exécute correctement.

Modules Python déjà fournis dans AWS Glue

Pour modifier la version de ces modules fournis, fournissez de nouvelles versions avec le paramètre de tâche --additional-python-modules.

AWS Glue version 2.0

AWS Glue version 2.0 inclut les modules Python prêts à l'emploi suivants :

  • avro-python3==1.10.0

  • awscli==1.27.60

  • boto3==1.12.4

  • botocore==1.15.4

  • certifi==2019.11.28

  • chardet==3.0.4

  • click==8.1.3

  • colorama==0.4.4

  • cycler==0.10.0

  • Cython==0.29.15

  • docutils==0.15.2

  • enum34==1.1.9

  • fsspec==0.6.2

  • idna==2.9

  • importlib-metadata==6.0.0

  • jmespath==0.9.4

  • joblib==0.14.1

  • kiwisolver==1.1.0

  • matplotlib==3.1.3

  • mpmath==1.1.0

  • nltk==3.5

  • numpy==1.18.1

  • pandas==1.0.1

  • patsy==0.5.1

  • pmdarima==1.5.3

  • ptvsd==4.3.2

  • pyarrow==0.16.0

  • pyasn1==0.4.8

  • pydevd==1.9.0

  • pyhocon==0.3.54

  • PyMySQL==0,9.3

  • pyparsing==2.4.6

  • python-dateutil==2.8.1

  • pytz==2019.3

  • PyYAML==5.3.1

  • regex==2022.10.31

  • requests==2.23.0

  • rsa==4.7.2

  • s3fs==0.4.0

  • s3transfer==0.3.3

  • scikit-learn==0.22.1

  • scipy==1.4.1

  • setuptools==45.2.0

  • six==1.14.0

  • Spark==1.0

  • statsmodels==0.11.1

  • subprocess32==3.5.4

  • sympy==1.5.1

  • tbats==1.0.9

  • tqdm==4.64.1

  • typing-extensions==4.4.0

  • urllib3==1.25.8

  • wheel==0.35.1

  • zipp==3.12.0

AWS Glue version 3.0

AWS Glue version 3.0 inclut les modules Python prêts à l'emploi suivants :

  • aiobotocore==1.4.2

  • aiohttp==3.8.3

  • aioitertools==0.11.0

  • aiosignal==1.3.1

  • async-timeout==4.0.2

  • asynctest==0.13.0

  • attrs==22.2.0

  • avro-python3==1.10.2

  • boto3==1.18.50

  • botocore==1.21.50

  • certifi==2021.5.30

  • chardet==3.0.4

  • charset-normalizer==2.1.1

  • click==8.1.3

  • cycler==0.10.0

  • Cython==0.29.4

  • docutils==0.17.1

  • enum34==1.1.10

  • frozenlist==1.3.3

  • fsspec==2021.8.1

  • idna==2.10

  • importlib-metadata==6.0.0

  • jmespath==0.10.0

  • joblib==1.0.1

  • kiwisolver==1.3.2

  • matplotlib==3.4.3

  • mpmath==1.2.1

  • multidict==6.0.4

  • nltk==3.6.3

  • numpy==1.19.5

  • packaging==23.0

  • pandas==1.3.2

  • patsy==0.5.1

  • Pillow==9.4.0

  • pip==23.0

  • pmdarima==1.8.2

  • ptvsd==4.3.2

  • pyarrow==5.0.0

  • pydevd==2.5.0

  • pyhocon==0.3.58

  • PyMySQL==1.0.2

  • pyparsing==2.4.7

  • python-dateutil==2.8.2

  • pytz==2021.1

  • PyYAML==5.4.1

  • regex==2022.10.31

  • requests==2.23.0

  • s3fs==2021.8.1

  • s3transfer==0.5.0

  • scikit-learn==0.24.2

  • scipy==1.7.1

  • six==1.16.0

  • Spark==1.0

  • statsmodels==0.12.2

  • subprocess32==3.5.4

  • sympy==1.8

  • tbats==1.1.0

  • threadpoolctl==3.1.0

  • tqdm==4.64.1

  • typing_extensions==4.4.0

  • urllib3==1.25.11

  • wheel==0.37.0

  • wrapt==1.14.1

  • yarl==1.8.2

  • zipp==3.12.0

AWS Glue version 4.0

AWS Glue version 4.0 inclut les modules Python prêts à l'emploi suivants :

  • aiobotocore==2.4.1

  • aiohttp==3.8.3

  • aioitertools==0.11.0

  • aiosignal==1.3.1

  • async-timeout==4.0.2

  • asynctest==0.13.0

  • attrs==22.2.0

  • avro-python3==1.10.2

  • boto3==1.24.70

  • botocore==1.27.59

  • certifi==2021.5.30

  • chardet==3.0.4

  • charset-normalizer==2.1.1

  • click==8.1.3

  • cycler==0.10.0

  • Cython==0.29.32

  • docutils==0.17.1

  • enum34==1.1.10

  • frozenlist==1.3.3

  • fsspec==2021.8.1

  • idna==2.10

  • importlib-metadata==5.0.0

  • jmespath==0.10.0

  • joblib==1.0.1

  • kaleido==0,2.1

  • kiwisolver==1.4.4

  • matplotlib==3.4.3

  • mpmath==1.2.1

  • multidict==6.0.4

  • nltk==3.7

  • numpy==1.23.5

  • packaging==23.0

  • pandas==1.5.1

  • patsy==0.5.1

  • Pillow==9.4.0

  • pip==23.0.1

  • plutly=5.16.0

  • pmdarima==2.0.1

  • ptvsd==4.3.2

  • pyarrow==10.0.0

  • pydevd==2.5.0

  • pyhocon==0.3.58

  • PyMySQL==1.0.2

  • pyparsing==2.4.7

  • python-dateutil==2.8.2

  • pytz==2021.1

  • PyYAML==6.0.1

  • regex==2022.10.31

  • requests==2.23.0

  • s3fs==2022.11.0

  • s3transfer==0.6.0

  • scikit-learn==1.1.3

  • scipy==1.9.3

  • setuptools==49.1.3

  • six==1.16.0

  • statsmodels==0.13.5

  • subprocess32==3.5.4

  • sympy==1.8

  • tbats==1.1.0

  • threadpoolctl==3.1.0

  • tqdm==4.64.1

  • typing_extensions==4.4.0

  • urllib3==1.25.11

  • wheel==0.37.0

  • wrapt==1.14.1

  • yarl==1.8.2

  • zipp==3.10.0

Compression de bibliothèques pour intégration

Sauf si elle est comprise dans un seul fichier .py, une bibliothèque doit être packagée dans une archive .zip. Le répertoire du package doit être à la racine de l'archive et contenir un fichier __init__.py pour le package. Python sera alors en mesure d'importer le package normalement.

Si votre bibliothèque se compose d'un seul module Python dans un fichier .py, vous n'avez pas besoin de la mettre dans un fichier .zip.

Chargement de bibliothèques Python dans les blocs-notes AWS Glue Studio

Pour spécifier les bibliothèques Python dans les blocs-notes AWS Glue Studio, consultez la section Installation de modules Python supplémentaires.

Chargement des bibliothèques Python dans un point de terminaison de développement

Si vous utilisez différents ensembles de bibliothèques pour différents scripts ETL, vous pouvez configurer un point de terminaison de développement distinct pour chaque ensemble, ou écraser le(s) fichier(s) .zip de bibliothèque que votre point de terminaison de développement charge à chaque fois que vous basculez d'un script à un autre.

Vous pouvez utiliser la console pour spécifier un ou plusieurs fichiers .zip de bibliothèque pour un point de terminaison de développement lorsque vous créez celui-ci. Après avoir attribué un nom et un rôle IAM, sélectionnez Script Libraries and job parameters (optional) (Bibliothèques de scripts et paramètres de tâches [facultatif]) et saisissez le chemin d'accès Amazon S3 complet à votre fichier .zip de bibliothèque dans la zone Python library path (Chemin de bibliothèque Python). Par exemple :

s3://bucket/prefix/site-packages.zip

Si vous le souhaitez, vous pouvez spécifier plusieurs chemins complets pour les fichiers, en les séparant par des virgules, mais sans espace, comme l'exemple suivant :

s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip

Si vous mettez à jour ces fichiers .zip ultérieurement, vous pouvez utiliser la console pour les importer de nouveau dans votre point de terminaison de développement. Naviguez vers le point de terminaison de développement concerné, cochez la case située en regard, puis choisissez Update ETL libraries (Mettre à jour des bibliothèques ETL) dans le menu Action.

De la même manière, vous pouvez spécifier des fichiers de bibliothèque via les API AWS Glue. Lorsque vous créez un point de terminaison de développement en appelant CreateDevEndpoint action (Python : create_dev_endpoint), vous pouvez spécifier un ou plusieurs chemins complets de bibliothèques dans le paramètre ExtraPythonLibsS3Path, dans un appel ressemblant à ceci :

dep = glue.create_dev_endpoint( EndpointName="testDevEndpoint", RoleArn="arn:aws:iam::123456789012", SecurityGroupIds="sg-7f5ad1ff", SubnetId="subnet-c12fdba4", PublicKey="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtp04H/y...", NumberOfNodes=3, ExtraPythonLibsS3Path="s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip")

Lorsque vous mettez à jour un point de terminaison de développement, vous pouvez également mettre à jour les bibliothèques chargées par ce point de terminaison en utilisant un objet DevEndpointCustomLibraries et en définissant le paramètre UpdateEtlLibraries sur True lors de l'appel de UpdateDevEndpoint (update_dev_endpoint).

Utilisation de bibliothèques Python dans une tâche ou JobRun

Lorsque vous créez un objet Job sur la console, vous pouvez spécifier un ou plusieurs fichiers .zip de bibliothèque en sélectionnant Script Libraries and job parameters (optional) (Bibliothèques de scripts et paramètres de tâches [facultatif]) et en entrant le ou les chemins d'accès Amazon S3 complets aux bibliothèques, comme vous le feriez lors de la création d'un point de terminaison de développement :

s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip

Si vous appelez CreateJob (créer_job), vous pouvez spécifier un ou plusieurs chemins d'accès complets aux bibliothèques par défaut en utilisant les paramètres par défaut --extra-py-files, comme suit :

job = glue.create_job(Name='sampleJob', Role='Glue_DefaultRole', Command={'Name': 'glueetl', 'ScriptLocation': 's3://my_script_bucket/scripts/my_etl_script.py'}, DefaultArguments={'--extra-py-files': 's3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip'})

Ensuite, lorsque vous démarrez une JobRun, vous pouvez remplacer le paramètre de bibliothèque par défaut par un autre :

runId = glue.start_job_run(JobName='sampleJob', Arguments={'--extra-py-files': 's3://bucket/prefix/lib_B.zip'})