

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

# Configurazione delle proprietà del processo per i processi shell di Python in AWS Glue
<a name="add-job-python"></a>

 Puoi utilizzare un processo shell di Python per eseguire gli script di Python come una shell in AWS Glue. Con un processo shell di Python puoi eseguire script compatibili con Python 3.6 o Python 3.9. 

**Nota**  
 Il supporto per Pyshell v3.6 terminerà il 1° marzo 2026. Per migrare i carichi di lavoro, consulta [Migrare dai job della shell Python AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/pyshell-migration.html). Se desideri continuare con la shell di Python v3.9, consulta [Migrazione dalla shell 3.6 di Python alla 3.9](#migrating-version-pyshell36-to-pyshell39). 

**Topics**
+ [Limitazioni](#python-shell-limitations)
+ [Ambiente di esecuzione](#python-shell-execution-environment)
+ [Definire le proprietà del processo per i processi shell di Python](#create-job-python-properties)
+ [Librerie supportate dai processi shell di Python](#python-shell-supported-library)
+ [Fornire la propria libreria Python](#create-python-extra-library)
+ [Utilizzabile AWS CloudFormation con i lavori della shell Python in AWS Glue](#python-shell-jobs-cloudformation)
+ [Migrazione dalla shell 3.6 di Python alla 3.9](#migrating-version-pyshell36-to-pyshell39)
+ [Migrazione dai job della AWS shell Glue Python](pyshell-migration.md)

## Limitazioni
<a name="python-shell-limitations"></a>

Tieni presente le seguenti limitazioni dei processi shell Python:
+  Non è possibile utilizzare i segnalibri nei processi di shell di Python. 
+ In Python 3.9 e versioni successive non puoi pacchettizzare alcuna libreria Python come file `.egg`. Utilizza invece `.whl`.
+ Per via di una limitazione sulle copie temporanee dei dati di S3, l'opzione `--extra-files` non può essere utilizzata.

## Ambiente di esecuzione
<a name="python-shell-execution-environment"></a>

I job della shell Python vengono eseguiti in un ambiente di esecuzione gestito che fornisce l'accesso all'archiviazione locale per l'elaborazione temporanea dei dati:

**Archiviazione temporanea locale**  
La `/tmp` directory è disponibile per l'archiviazione temporanea durante l'esecuzione del lavoro. Questa directory fornisce circa 14 GiB di spazio libero che è possibile utilizzare per:  
+ Elaborazione di file temporanei
+ Archiviazione intermedia dei dati
+ Memorizzazione nella cache di piccoli set di dati
La `/tmp` directory è effimera e viene ripulita dopo il completamento del lavoro. Non utilizzarlo per l'archiviazione persistente di dati importanti.

## Definire le proprietà del processo per i processi shell di Python
<a name="create-job-python-properties"></a>

Queste sezioni descrivono la definizione delle proprietà del lavoro nella AWS Glue Studio o l'utilizzo della AWS CLI.

### AWS Glue Studio
<a name="create-job-python-properties-studio"></a>

Quando definisci il processo della shell Python in AWS Glue Studio, fornisci alcune delle seguenti proprietà: 

**Ruolo IAM**  
Specificate il ruolo AWS Identity and Access Management (IAM) utilizzato per l'autorizzazione alle risorse utilizzate per eseguire il processo e accedere agli archivi dati. Per ulteriori informazioni sulle autorizzazioni per l'esecuzione di processi in AWS Glue, consulta [Gestione delle identità e degli accessi per AWS Glue](security-iam.md).

**Tipo**  
Scegli **Python shell (Shell di Python)** per eseguire uno script Python con il comando di processo denominato `pythonshell`.

**Versione di Python**  
Scegli la versione di Python. La versione predefinita è Python 3.9. Le versioni valide sono Python 3.6 e Python 3.9.

**Carica librerie di analisi comuni (scelta consigliata)**  
Scegli questa opzione per includere le librerie comuni per Python 3.9 nella shell Python.  
Se le tue librerie sono personalizzate o sono in conflitto con quelle preinstallate, puoi scegliere di non installare librerie comuni. Tuttavia, oltre alle librerie comuni puoi installare librerie aggiuntive.  
Quando selezioni questa opzione, l'opzione `library-set` è impostata su `analytics`. Quando deselezioni questa opzione, l'opzione `library-set` è impostata su `none`. 

**Nome file e percorso dello script**  
Il codice nello script definisce la logica procedurale del processo. Puoi fornire il nome e la posizione dello script in Amazon Simple Storage Service (Amazon S3). Conferma che non esiste un file con lo stesso nome della directory di script nel percorso. Per ulteriori informazioni sull'uso degli script, consulta [AWS Glue guida alla programmazione](edit-script.md).

**Script**  
Il codice nello script definisce la logica procedurale del processo. Puoi codificare lo script in Python 3.6 o Python 3.9. Puoi modificare uno script in AWS Glue Studio.

**Unità di elaborazione dati (DPU)**  
Il numero massimo di unità di elaborazione AWS Glue dati (DPUs) che possono essere allocate durante l'esecuzione di questo processo. Una DPU è una misura relativa della potenza di elaborazione costituita da 4 V di capacità CPUs di elaborazione e 16 GB di memoria. Per ulteriori informazioni, consultare [Prezzi di AWS Glue](https://aws.amazon.com/glue/pricing/).   
Puoi impostare il valore su 0,0625 o 1. Il valore predefinito è 0.0625. In entrambi i casi, il disco locale per l'istanza sarà di 20 GB.

### CLI
<a name="create-job-python-properties-cli"></a>

 Puoi anche creare un job della **shell Python** usando AWS CLI, come nell'esempio seguente. 

```
 aws glue create-job --name python-job-cli --role Glue_DefaultRole 
     --command '{"Name" :  "pythonshell", "PythonVersion": "3.9", "ScriptLocation" : "s3://amzn-s3-demo-bucket/scriptname.py"}'  
     --max-capacity 0.0625
```

**Nota**  
 Non devi specificare la versione di AWS Glue poiché il parametro `--glue-version` non si applica ai processi shell di AWS Glue. Qualsiasi versione specificata verrà ignorata. 

 Lavori che crei con l' AWS CLI impostazione predefinita di Python 3. Le versioni valide di Python sono 3 (corrispondenti a 3.6) e 3.9. Per specificare Python 3.6, aggiungi questa tupla al parametro `--command`: `"PythonVersion":"3"` 

 Per specificare Python 3.9, aggiungi questa tupla al parametro `--command`: `"PythonVersion":"3.9"` 

 Per impostare la capacità massima utilizzata da un processo shell di Python, fornire il parametro `--max-capacity`. Per i processi di shell di Python non è possibile utilizzare il parametro `--allocated-capacity`. 

## Librerie supportate dai processi shell di Python
<a name="python-shell-supported-library"></a>

 Nella shell Python con Python 3.9 puoi scegliere il set di librerie per utilizzare set di librerie preconfezionati per le tue esigenze. Puoi utilizzare l'opzione `library-set` per scegliere il set di librerie. I valori validi sono `analytics` e `none`. 

L'ambiente per l'esecuzione di un processo shell di Python supporta le seguenti librerie: 


| Versione di Python | Python 3.6 | Python 3.9 | 
| --- | --- | --- | 
| Set di librerie | N/D | analytics | nessuno | 
| 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,9203 | 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 |  | 
| richieste | 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 |  | 2022,3,0 |  | 

Puoi utilizzare la libreria `NumPy` in un processo shell di Python per il calcolo scientifico. Per ulteriori informazioni, consulta [NumPy](http://www.numpy.org). L'esempio seguente mostra uno NumPy script che può essere usato in un job della shell Python. Lo script visualizza "Hello world" e i risultati di numerosi calcoli matematici.

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

## Fornire la propria libreria Python
<a name="create-python-extra-library"></a>

### Utilizzo di PIP
<a name="create-python-extra-library-pip"></a>

La shell Python che utilizza Python 3.9 consente di fornire moduli Python aggiuntivi o versioni diverse a livello di processo. Puoi utilizzare l'opzione `--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. Non è possibile fornire moduli Python personalizzati ospitati su Amazon S3 con questo parametro quando si utilizzano processi di shell Python.

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

AWS Glue utilizza Python Package Installer (pip3) per installare i moduli aggiuntivi. Puoi passare opzioni pip3 aggiuntive all'interno del valore di `--additional-python-modules`. Ad esempio, `"scikit-learn==0.21.3 -i https://pypi.python.org/simple/"`. Si applicano eventuali incompatibilità o limitazioni da pip3.

**Nota**  
Per evitare incompatibilità in futuro, si consiglia di utilizzare le librerie create per Python 3.9.

### Utilizzo di un file Egg o Whl
<a name="create-python-extra-library-egg-whl"></a>

È possibile che uno o più pacchetti di librerie Python siano disponibili come un file `.whl` o `.egg`. In questo caso, puoi specificarli nel tuo processo utilizzando AWS Command Line Interface (AWS CLI) sotto il flag "`--extra-py-files`", come mostrato nell'esempio seguente.

```
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://amzn-s3-demo-bucket/EGG-FILE", "s3://amzn-s3-demo-bucket/WHEEL-FILE"]}'
```

In caso di dubbi su come creare un file `.egg` o `.whl` da una libreria Python, utilizza la procedura seguente. Questo esempio si applica su sistemi macOS, Linux e Windows Subsystem for Linux (WSL).

**Per creare un file .egg o .whl Python**

1. Crea un cluster Amazon Redshift in un cloud privato virtuale (VPC, Virtual Private Cloud) e aggiungi alcuni dati a una tabella.

1. Crea una AWS Glue connessione per la VPC-SecurityGroup-Subnet combinazione che hai usato per creare il cluster. Verifica che la connessione funzioni.

1. Crea una directory denominata `redshift_example` e crea un file denominato `setup.py`. Incollare il codice seguente in `setup.py`.

   ```
   from setuptools import setup
   
   setup(
       name="redshift_module",
       version="0.1",
       packages=['redshift_module']
   )
   ```

1. Nella directory `redshift_example` crea una directory `redshift_module`. Nella directory `redshift_module` crea i file `__init__.py` e `pygresql_redshift_common.py`.

1. Lascia il file `__init__.py` vuoto. Incolla il codice seguente in `pygresql_redshift_common.py`. Sostituisci *port**db\$1name*,*user*, e *password\$1for\$1user* con dettagli specifici del tuo cluster Amazon Redshift. Sostituisci *table\$1name* con il nome della tabella in 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 * from table_name;"
       res = con.query(statement)
       return res
   ```

1. Se non sei ancora in tale directory, passa alla directory `redshift_example`.

1. Esegui una delle seguenti operazioni:
   + Per creare un file `.egg`, esegui il comando seguente.

     ```
     python setup.py bdist_egg
     ```
   + Per creare un file `.whl`, esegui il comando seguente.

     ```
     python setup.py bdist_wheel
     ```

1. Installa le dipendenze necessarie per il comando precedente.

1. Il comando crea un file nella directory `dist`:
   + Se hai creato un file egg, viene denominato `redshift_module-0.1-py2.7.egg`.
   + Se hai creato un file wheel, viene denominato `redshift_module-0.1-py2.7-none-any.whl`.

   Carica questo file in Amazon S3.

   In questo esempio, il percorso del file caricato è *s3://amzn-s3-demo-bucket/EGG-FILE* o *s3://amzn-s3-demo-bucket/WHEEL-FILE*. 

1. Crea un file Python da utilizzare come script per il processo AWS Glue e aggiungi al file il codice seguente.

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

1. Carica il file precedente in Amazon S3. In questo esempio, il percorso del file caricato è *s3://amzn-s3-demo-bucket/scriptname.py*. 

1. Crea un processo shell di Python utilizzando questo script. Nella console AWS Glue, nella pagina **Job properties (Proprietà processo)**, specifica il percorso al file `.egg/.whl` nella casella **Python library path (Percorso libreria Python)**. Se sono presenti più file `.egg/.whl` e file Python, occorre fornire un elenco separato da virgole in questa casella. 

   Quando si modificano o si rinominano i file `.egg`, i nomi dei file devono utilizzare i nomi predefiniti generati dal comando "python setup.py bdist\$1egg" o devono rispettare le convenzioni di denominazione del modulo Python. Per ulteriori informazioni, vedere la [Guida di stile per il codice Python](https://www.python.org/dev/peps/pep-0008/). 

   Utilizzando AWS CLI, crea un lavoro con un comando, come nell'esempio seguente.

   ```
   aws glue create-job --name python-redshift-test-cli --role Role --command '{"Name" :  "pythonshell", "ScriptLocation" : "s3://amzn-s3-demo-bucket/scriptname.py"}' 
        --connections Connections="connection-name" --default-arguments '{"--extra-py-files" : ["s3://amzn-s3-demo-bucket/EGG-FILE", "s3://amzn-s3-demo-bucket/WHEEL-FILE"]}'
   ```

   Quando il processo viene eseguito, lo script stampa le righe create nella *table\$1name* tabella nel cluster Amazon Redshift.

## Utilizzabile AWS CloudFormation con i lavori della shell Python in AWS Glue
<a name="python-shell-jobs-cloudformation"></a>

 È possibile utilizzare AWS CloudFormation con i job della shell Python in. AWS Glue Di seguito è riportato un esempio: 

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

 L'output del gruppo Amazon CloudWatch Logs per i job della shell Python è. `/aws-glue/python-jobs/output` Per gli errori, consulta il gruppo di log `/aws-glue/python-jobs/error`. 

## Migrazione dalla shell 3.6 di Python alla 3.9
<a name="migrating-version-pyshell36-to-pyshell39"></a>

 Per migrare i lavori della shell Python alla versione più recente: AWS Glue 

1.  Nella AWS Glue console ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)), scegli il tuo job di shell Python esistente. 

1.  Nella scheda **Dettagli del processo**, imposta la versione di Python su `Python 3.9` e scegli **Salva**. 

1.  Assicurati che lo script del processo sia compatibile con Python 3.9 e che funzioni correttamente. 