

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

# Creazione di una trasformazione personalizzata
<a name="transforms-custom"></a>

Se devi eseguire trasformazioni più complicate sui dati o se vuoi aggiungere chiavi di proprietà dei dati al set di dati, puoi aggiungere una trasformazione **Custom code** al diagramma di processo. Il nodo Custom code permette di immettere uno script che esegue la trasformazione. 

Quando si utilizza il codice personalizzato, è necessario utilizzare un editor di schemi per indicare le modifiche apportate all'output tramite il codice personalizzato. Quando modifichi lo schema, puoi eseguire le seguenti operazioni:
+ Aggiungere o rimuovere chiavi di proprietà dei dati
+ Modificare il tipo di dati delle chiavi di proprietà dei dati
+ Modificare il nome delle chiavi di proprietà dei dati.
+ Ristrutturare una chiave di proprietà nidificata

È necessario utilizzare una *SelectFromCollection*trasformazione per sceglierne una `DynamicFrame` dal risultato del nodo di trasformazione personalizzata prima di poter inviare l'output a una posizione di destinazione. 

Usa i processi seguenti per aggiungere un nodo di trasformazione personalizzato al diagramma di processo.

## Aggiunta di un nodo di trasformazione di codice personalizzato al diagramma di processo
<a name="transforms-custom-addnode"></a>

**Per aggiungere un nodo di trasformazione personalizzato al diagramma di processo**

1. (Facoltativo) Apri il pannello Risorse, quindi scegli **Trasformazione personalizzata** per aggiungere una nuova trasformazione al diagramma del processo. 

1. Nella scheda **Node properties** (Proprietà del nodo), inserisci un nome per il nodo nel diagramma del processo. Se non è già selezionato un nodo padre, o se desideri più input per la trasformazione personalizzata, scegli un nodo dall'elenco **Node parents** (Nodi padre) da utilizzare come origine di input per la trasformazione.

## Immissione del codice per il nodo di trasformazione personalizzato
<a name="transforms-custom-addcode"></a>

Puoi digitare o copiare il codice in un campo di input. Il processo utilizza questo codice per eseguire la trasformazione dei dati. Puoi fornire un frammento di codice in Python o Scala. Il codice richiede uno o più `DynamicFrames` come input e restituisce una raccolta di `DynamicFrames`. 

**Per inserire lo script per un nodo di trasformazione personalizzato**

1. Con il nodo di trasformazione personalizzato selezionato nel diagramma di processo, scegli la casella **Transform** (Trasformazione). 

1. Nel campo di immissione testo sotto l'intestazione **Code block** (Blocco di codice), incolla o immetti il codice per la trasformazione. Il codice utilizzato deve corrispondere al linguaggio specificato per il processo nella scheda **Job details** (Dettagli del processo).

   Quando si fa riferimento ai nodi di input nel codice, AWS Glue Studio assegna un nome ai `DynamicFrames` restituiti dai nodi del diagramma del processo in modo sequenziale in base all'ordine di creazione. Utilizza uno dei seguenti metodi di denominazione nel codice:
   + Generazione di codice classico: utilizza i nomi funzionali per fare riferimento ai nodi nel diagramma del processo.
     + Nodi di origine dati: `DataSource0`, `DataSource1`, `DataSource2` e così via.
     + Nodi di trasformazione : `Transform0`, `Transform1`, `Transform2` e così via.
   + Nuova generazione di codice: utilizza il nome specificato nella scheda **Node properties** (Proprietà del nodo) di un nodo, aggiunta con "`_node1`","`_node2`" e così via. Ad esempio, `S3bucket_node1`, `ApplyMapping_node2`, `S3bucket_node2`, `MyCustomNodeName_node1`.

   Per ulteriori informazioni sul nuovo generatore di codice, consulta [Generazione di codice dello script](job-editor-features.md#code-gen).

Gli esempi seguenti mostrano il formato del codice da inserire nella casella del codice:

------
#### [ Python ]

L'esempio seguente prende il primo `DynamicFrame` ricevuto, lo converte in un `DataFrame` per applicare il metodo di filtro nativo (conservando solo i registri che hanno più di 1000 voti), quindi prima di restituirlo lo converte di nuovo in un `DynamicFrame`.

```
def FilterHighVoteCounts (glueContext, dfc) -> DynamicFrameCollection:
    df = dfc.select(list(dfc.keys())[0]).toDF()
    df_filtered = df.filter(df["vote_count"] > 1000)
    dyf_filtered = DynamicFrame.fromDF(df_filtered, glueContext, "filter_votes")
    return(DynamicFrameCollection({"CustomTransform0": dyf_filtered}, glueContext))
```

------
#### [ Scala ]

L'esempio seguente prende il primo `DynamicFrame` ricevuto, lo converte in un `DataFrame` per applicare il metodo di filtro nativo (conservando solo i registri che hanno più di 1000 voti), quindi prima di restituirlo lo converte di nuovo in un `DynamicFrame`.

```
object FilterHighVoteCounts {
  def execute(glueContext : GlueContext, input : Seq[DynamicFrame]) : Seq[DynamicFrame] = {
    val frame = input(0).toDF()
    val filtered = DynamicFrame(frame.filter(frame("vote_count") > 1000), glueContext)
    Seq(filtered)
  }
}
```

------

## Modifica dello schema in un nodo di trasformazione personalizzato
<a name="transforms-custom-editschema"></a>

Quando si utilizza un nodo di trasformazione personalizzato, AWS Glue Studio non può dedurre automaticamente gli schemi di output creati dalla trasformazione. Devi utilizzare l'editor dello schema per descrivere le modifiche allo schema implementate dal codice di trasformazione personalizzato.

Un nodo di codice personalizzato può avere un numero qualsiasi di nodi padre, ognuno dei quali fornisce un `DynamicFrame` come input per il codice personalizzato. Un nodo di codice personalizzato restituisce una raccolta di `DynamicFrames`. Ogni `DynamicFrame` utilizzato come input ha uno schema associato. È necessario aggiungere uno schema che descriva ogni `DynamicFrame` restituito dal nodo di codice personalizzato. 

**Nota**  
 Quando imposti il tuo schema su una trasformazione personalizzata, AWS Glue Studio non eredita schemi dai nodi precedenti. Per aggiornare lo schema, seleziona il nodo di trasformazione personalizzata, quindi sceglie la scheda Data preview (anteprima dati. Una volta generata l'anteprima, scegli “Use Preview Schema” (usa schema di anteprima). Lo schema verrà quindi sostituito dallo schema utilizzando i dati di anteprima. 

**Per modificare gli schemi per un nodo di trasformazione personalizzato**

1. Con il nodo di trasformazione personalizzato selezionato nel diagramma di processo, scegli la scheda **Output schema** (Schema di output) nel pannello dei dettagli del nodo. 

1. Scegli **Edit** (Modifica) per apportare modifiche allo schema. 

   Se disponi di chiavi di proprietà dei dati nidificate, ad esempio una matrice o un oggetto, puoi scegliere l'icona **Expand-Rows** (Espandi righe) (![A double-ended arrow pointing upwards and downwards between two parallel lines](http://docs.aws.amazon.com/it_it/glue/latest/dg/images/expand-rows-icon.png)) in alto a destra di ogni pannello dello schema per espandere l'elenco delle chiavi di proprietà dei dati figlio. Dopo aver selezionato l'icona, questa si trasforma nell'icona **Collapse-Rows** (Comprimi righe) (![Two arrows, one pointing up to a line and one pointing down to the same line](http://docs.aws.amazon.com/it_it/glue/latest/dg/images/collapse-rows-icon.png)), che puoi selezionare per comprimere l'elenco delle chiavi di proprietà figlio.

1. Modifica lo schema utilizzando le seguenti operazioni nella sezione a destra della pagina:
   + Per rinominare una chiave di proprietà, posiziona il cursore nella casella di testo **Key** (Chiave) per la chiave di proprietà, quindi immetti il nuovo nome.
   + Per modificare il tipo di dati per una chiave di proprietà dei dati, usa l'elenco per scegliere il nuovo tipo di dati per la chiave di proprietà.
   + Per aggiungere una nuova chiave di proprietà di livello superiore allo schema, scegli l'opzione **Overflow** (![An ellipsis (...)](http://docs.aws.amazon.com/it_it/glue/latest/dg/images/edit-schema-actions-button.png)) sulla sinistra del pulsante **Cancel** (Annulla), quindi scegli **Add root key** (Aggiungi chiave root).
   + Per aggiungere una chiave di proprietà figlio allo schema, scegli l'icona **Add-Key** (Aggiungi chiave) ![A rectangle with a plus sign in the bottom left corner](http://docs.aws.amazon.com/it_it/glue/latest/dg/images/filter-add-icon.png) associata alla chiave padre. Inserisci un nome per la chiave figlio e scegli il tipo di dati.
   + Per rimuovere una colonna dallo schema, scegli l'icona **Remove** (Elimina) (![An outline of a trash can](http://docs.aws.amazon.com/it_it/glue/latest/dg/images/delete-icon-black.png)) all'estrema destra del nome della chiave. 

1. Se il codice di trasformazione personalizzato utilizza più `DynamicFrames`, è possibile aggiungere schemi di output aggiuntivi. 
   + Per aggiungere un nuovo schema vuoto, scegli l'icona **Overflow** (![An ellipsis (...)](http://docs.aws.amazon.com/it_it/glue/latest/dg/images/edit-schema-actions-button.png)), quindi scegli **Add output schema** (Aggiungi schema di output).
   + Per copiare uno schema esistente in un nuovo schema di output, assicurati che lo schema da copiare sia visualizzato nel selettore dello schema. Seleziona l'icona **Overflow** (![An ellipsis (...)](http://docs.aws.amazon.com/it_it/glue/latest/dg/images/edit-schema-actions-button.png)), quindi scegli **Duplicate** (Duplica).

   Se vuoi rimuovere uno schema di output, assicurati che lo schema da copiare sia visualizzato nel selettore dello schema. Seleziona l'icona **Overflow** (![An ellipsis (...)](http://docs.aws.amazon.com/it_it/glue/latest/dg/images/edit-schema-actions-button.png)), quindi scegli **Delete** (Elimina).

1. Aggiungi nuove chiavi radice al nuovo schema o modifica le chiavi duplicate. 

1. Quando modifichi gli lo schemi di output, scegli il pulsante **Apply** (Applica) per salvare le modifiche e uscire dall'editor dello schema.

   Se non vuoi salvare le modifiche, seleziona il pulsante **Cancel** (Annulla).

## Configurare l'output della trasformazione personalizzata
<a name="transforms-custom-output"></a>

Una trasformazione di codice personalizzata restituisce una raccolta di `DynamicFrames`, anche se nel set di risultati è presente solo un `DynamicFrame`. 

**Per elaborare l'output da un nodo di trasformazione personalizzato**

1. Aggiungi un nodo di *SelectFromCollection*trasformazione, che ha il nodo di trasformazione personalizzato come nodo principale. Aggiorna questa trasformazione per indicare il set di dati da utilizzare. Per ulteriori informazioni, consulta [Utilizzo SelectFromCollection per scegliere quale set di dati conservare](transforms-configure-select-collection.md).

1. Aggiungi *SelectFromCollection*trasformazioni aggiuntive al diagramma del lavoro se desideri utilizzarne altre `DynamicFrames` prodotte dal nodo di trasformazione personalizzato. 

   Consideriamo uno scenario in cui aggiungi un nodo di trasformazione personalizzato per dividere un set di dati di volo in più set di dati, ma duplichi alcune delle chiavi di proprietà identificative in ciascuno schema di output, ad esempio la data di volo o il numero di volo. Si aggiunge un nodo di *SelectFromCollection*trasformazione per ogni schema di output, con il nodo di trasformazione personalizzato come elemento principale.

1. (Facoltativo) È quindi possibile utilizzare ogni nodo di *SelectFromCollection*trasformazione come input per altri nodi del processo o come genitore per un nodo di destinazione dei dati.