Creazione di una trasformazione personalizzata - 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à.

Creazione di una trasformazione personalizzata

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

Devi utilizzare una trasformazione SelectFromCollection per scegliere un singolo DynamicFrame dal risultato del nodo di trasformazione Custom 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

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.

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

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

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

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

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.

  2. 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 ) 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 ), che puoi selezionare per comprimere l'elenco delle chiavi di proprietà figlio.

  3. 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 (...) ) 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 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 ) all'estrema destra del nome della chiave.

  4. 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 (...) ), 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 (...) ), 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 (...) ), quindi scegli Delete (Elimina).

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

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

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 una trasformazione SelectFromCollection, che ha il nodo di trasformazione personalizzato come nodo padre. Aggiorna questa trasformazione per indicare il set di dati da utilizzare. Per ulteriori informazioni, consulta Utilizzo di SelectFromCollection per scegliere quale set di dati conservare.

  2. Aggiungi altre trasformazioni SelectFromCollection al diagramma di processo se vuoi utilizzare DynamicFrames aggiuntivi prodotti 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. Aggiungi un nodo di trasformazione SelectFromCollection per ogni schema di output, con il nodo di trasformazione personalizzato come nodo padre.

  3. (Facoltativo) Puoi quindi utilizzare ogni nodo di trasformazione SelectFromCollection come input per altri nodi nel processo o come padre per un nodo di destinazione dati.