Usare le librerie Python con Glue AWS - AWS Glue

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Usare le librerie Python con Glue AWS

AWS Glue consente di installare moduli e librerie Python aggiuntivi da utilizzare con AWS Glue ETL.

Installazione di librerie Python aggiuntive in AWS Glue 5.0 usando requirements.txt

In AWS Glue 5.0, puoi fornire lo standard di fatto per requirements.txt gestire le dipendenze della libreria Python. A tale scopo, fornite i seguenti due parametri di lavoro:

  • Chiave: --python-modules-installer-option

    Valore: -r

  • Chiave: --additional-python-modules

    Valore: s3://path_to_requirements.txt

AWS I nodi Glue 5.0 caricano inizialmente le librerie python specificate inrequirements.txt. Ecco un esempio di requirements.txt:

awswrangler==3.9.1 elasticsearch==8.15.1 PyAthena==3.9.0 PyMySQL==1.1.1 PyYAML==6.0.2 pyodbc==5.2.0 pyorc==0.9.0 redshift-connector==2.1.3 scipy==1.14.1 scikit-learn==1.5.2 SQLAlchemy==2.0.36

Installazione di moduli Python aggiuntivi con pip in AWS Glue 2.0 o versioni successive

AWS Glue utilizza Python Package Installer (pip3) per installare moduli aggiuntivi che devono essere utilizzati da Glue ETL. AWS Puoi utilizzare il parametro --additional-python-modules con un elenco di moduli Python separati da virgole per aggiungere un nuovo modulo o modificare la versione di un modulo esistente. Puoi installare distribuzioni personalizzate di una libreria caricando la distribuzione in Amazon S3 e successivamente includendo il percorso dell'oggetto Amazon S3 nell'elenco dei moduli.

Puoi passare opzioni aggiuntive a pip3 tramite il parametro --python-modules-installer-option. Ad esempio, è possibile passare "--upgrade" per aggiornare i pacchetti specificati da "--additional-python-modules". Per altri esempi, consulta Creazione di moduli Python da una ruota per carichi di lavoro Spark ETL con Glue 2.0. AWS

Se le tue dipendenze in Python dipendono transitivamente dal codice compilato nativo, potresti riscontrare la seguente limitazione: AWS Glue non supporta la compilazione di codice nativo nell'ambiente di lavoro. Tuttavia, i job AWS Glue vengono eseguiti in un ambiente Amazon Linux 2. Potresti essere in grado di fornire le tue dipendenze native in un formato compilato tramite un file wheel distribuibile.

Ad esempio, per aggiornare o aggiungere un nuovo modulo scikit-learn usa la seguente chiave-valore: "--additional-python-modules", "scikit-learn==0.21.3".

Inoltre, all'interno dell'opzione --additional-python-modules puoi specificare un percorso Amazon S3 per un modulo ruota Python. Per esempio:

--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

È possibile --additional-python-modules specificarli nel campo Job parameters della console AWS Glue o modificando gli argomenti del lavoro nell' AWS SDK. Per ulteriori informazioni sulla configurazione dei parametri di processo, consulta Utilizzo dei parametri del lavoro nei lavori AWS Glue.

Inclusione di file Python con funzionalità native PySpark

AWS Glue utilizza PySpark per includere file Python nei job AWS Glue ETL. Quando possibile, ti consigliamo di usare --additional-python-modules per gestire le dipendenze. Puoi utilizzare il parametro del processo --extra-py-files per includere i file Python. Le dipendenze devono essere ospitate in Amazon S3 e il valore dell'argomento deve essere un elenco delimitato da virgole di percorsi Amazon S3 senza spazi. Questa funzionalità si comporta come la gestione delle dipendenze Python che useresti con Spark. Per ulteriori informazioni sulla gestione delle dipendenze di Python in Spark, consulta la pagina Utilizzo delle funzionalità PySpark native nella documentazione di Apache Spark. --extra-py-filesè utile nei casi in cui il codice aggiuntivo non è incluso nel pacchetto o quando si sta migrando un programma Spark con una toolchain esistente per la gestione delle dipendenze. Affinché gli strumenti di dipendenza siano gestibili, sarà necessario raggruppare le dipendenze prima di inviarle.

Script di programmazione che utilizzano trasformazioni visive

Quando crei un lavoro AWS Glue utilizzando l'interfaccia visiva di AWS Glue Studio, puoi trasformare i tuoi dati con nodi di trasformazione dati gestiti e trasformazioni visive personalizzate. Per ulteriori informazioni sui nodi di trasformazione dei dati gestiti, consultaTrasforma i dati con trasformazioni AWS Glue gestite. Per ulteriori informazioni sulle trasformazioni visive personalizzate, vedere Trasforma i dati con trasformazioni visive personalizzate . Gli script che utilizzano trasformazioni visive possono essere generati solo quando il linguaggio del lavoro è impostato per utilizzare Python.

Quando si genera un lavoro AWS Glue utilizzando trasformazioni visive, AWS Glue Studio includerà queste trasformazioni nell'ambiente di runtime utilizzando il --extra-py-files parametro nella configurazione del lavoro. Per ulteriori informazioni sui parametri di processo, consulta Utilizzo dei parametri del lavoro nei lavori AWS Glue. Quando si apportano modifiche a uno script o a un ambiente di runtime generato, è necessario mantenere questa configurazione del lavoro affinché lo script venga eseguito correttamente.

Moduli Python già forniti in Glue AWS

Puoi modificare la versione dei moduli disponibili con il parametro di processo --additional-python-modules.

AWS Glue version 5.0

AWS La versione 5.0 di Glue include i seguenti moduli Python pronti all'uso:

  • aiobotocore==2.13.1

  • aiohappy eyebuls==2.3.5

  • aiohttp=3.10.1

  • aioitertools==0.11.0

  • aiosignal==1.3.1

  • appdirs==1.4.4

  • attrs==24.2.0

  • boto3==1.34.131

  • botocore==1.34.131

  • certifi==2024.7.4

  • charset-normalizer==3.3.2

  • contourpy==1.2.1

  • ciclo==0.12.1

  • fonttools==4.53.1

  • lista congelata ==1.4.1

  • fsspec==2024.6.1

  • idna==2.10

  • jmespath==0.10.0

  • caleido==0.2.1

  • argento di kiwi ==1.4.5

  • matplotlib==3.9.0

  • multidict==6.0.5

  • numpy==1.26.4

  • imballaggio==24.1

  • panda ==2.2.2

  • cuscino ==10.4.0

  • pip=22.3.1

  • trame ==5.23.0

  • freccia a spirale ==17.0.0

  • pyparsing==3.1.2

  • python-dateutil==2.9.0.post0

  • pytz==2024.1

  • richieste==2.32.2

  • s3fs==2024.6.1

  • s3transfer ==0.10.2

  • nato dal mare==0.13.2

  • strumenti di configurazione ==59.6.0

  • six==1.16.0

  • tenacia ==9.0.0

  • tzdata==2024.1

  • urllib3==1.25.10

  • ambiente virtuale ==20.4.0

  • wrapt==1.16.0

  • yarl=1.9.4

AWS Glue version 4.0

AWS La versione 4.0 di Glue include i seguenti moduli Python pronti all'uso:

  • 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

  • trame ==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

AWS Glue version 3.0

AWS La versione 3.0 di Glue include i seguenti moduli Python pronti all'uso:,

  • 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 2.0

AWS La versione 2.0 di Glue include i seguenti moduli Python pronti all'uso:

  • 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

Compressione delle librerie per l’inclusione

A meno che una libreria non sia contenuta in un singolo file .py, deve essere compressa in un archivio .zip. La directory del pacchetto deve trovarsi al livello radice dell'archivio e deve contenere un file __init__.py per il pacchetto. Python sarà in grado di importare il pacchetto nel modo normale.

Se la tua libreria è composta da un singolo modulo Python in un file .py, non è necessario trasferirla in un file .zip.

Caricamento delle librerie Python nei notebook AWS Glue Studio

Per specificare le librerie Python nei notebook AWS Glue Studio, vedi Installazione di moduli Python aggiuntivi.

Caricamento di librerie Python in un endpoint di sviluppo

Se utilizzi diversi set di librerie per diversi script ETL, puoi impostare un endpoint di sviluppo separato per ciascun set oppure sovrascrivere i file .zip della libreria che l'endpoint di sviluppo carica ogni volta che si cambia script.

Puoi utilizzare la console per specificare uno o più file .zip di libreria per un endpoint di sviluppo al momento della creazione. Dopo l'assegnazione di un nome e un ruolo IAM, scegli Script Libraries and job parameters (optional) (Librerie di Script e parametri di processo -opzionale) e immetti il percorso Amazon S3 completo per i tuoi file .zip della libreria nella casella Python library path (Percorso libreria Python). Ad esempio:

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

Se lo desideri, puoi specificare più percorsi completi per i file, separandoli con virgole ma non spazi, in questo modo:

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

Se aggiorni questi file .zip in un secondo momento, puoi utilizzare la console per importarli nuovamente nell'endpoint di sviluppo. Individua l'endpoint dello sviluppatore in questione, verifica la casella a esso corrispondente e scegli Update ETL libraries (Aggiorna librerie ETL) dal menu Action (Operazione).

Allo stesso modo, potete specificare i file di libreria usando AWS Glue APIs. Quando crei un endpoint di sviluppo chiamando CreateDevEndpoint azione (Python: create_dev_endpoint), puoi specificare uno o più percorsi completi per le librerie nel parametro ExtraPythonLibsS3Path in una chiamata come la seguente:

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")

Quando aggiorni un endpoint di sviluppo, puoi anche aggiornare le librerie caricate utilizzando un oggetto DevEndpointCustomLibraries e impostare il parametro UpdateEtlLibraries su True durante la chiamata UpdateDevEndpoint (update_dev_endpoint).

Usare le librerie Python in un lavoro o JobRun

Quando crei un nuovo processo nella console, puoi specificare uno o più file ZIP di libreria scegliendo Script Libraries and job parameters (optional) (Librerie di script e parametri di processo - opzionale) e immettendo percorsi di librerie Amazon S3 completi, analogamente a come faresti quando crei un endpoint di sviluppo:

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

Se stai chiamando CreateJob (create_job), puoi specificare uno o più percorsi completi alle librerie predefinite utilizzando il parametro predefinito --extra-py-files, come segue:

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'})

Quindi, quando avvii un JobRun, puoi sovrascrivere l'impostazione della libreria predefinita con una diversa:

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