Fase 2. Implementazione della logica di trasformazione - 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à.

Fase 2. Implementazione della logica di trasformazione

Nota

Le trasformazioni visive personalizzate supportano solo gli script Python. Scala non è supportato.

Per aggiungere il codice che implementa la funzione definita dal file di configurazione .json, si consiglia di posizionare il file Python nella stessa posizione del file .json, con lo stesso nome ma con l'estensione ".py". AWS Glue Studio accoppia automaticamente i file .json e .py in modo che non sia necessario specificare il percorso del file Python nel file di configurazione.

Nel file Python, aggiungi la funzione dichiarata, con i parametri denominati configurati e registrala per l'uso in DynamicFrame. Di seguito è riportato un esempio di un file Python:

from awsglue import DynamicFrame # self refers to the DynamicFrame to transform, # the parameter names must match the ones defined in the config # if it's optional, need to provide a default value def myTransform(self, email, phone, age=None, gender="", country="", promotion=False): resulting_dynf = # do some transformation on self return resulting_dynf DynamicFrame.myTransform = myTransform

Si consiglia di utilizzare un notebook AWS Glue per sviluppare e testare il codice python in modo più rapido. consulta, Nozioni di base sui notebook in AWS Glue Studio.

Per illustrare come implementare la logica della trasformazione, la trasformazione visiva personalizzata nell'esempio seguente è una trasformazione per filtrare i dati in entrata e conservare solo i dati relativi a uno specifico stato degli Stati Uniti. Il file .json contiene il parametro per functionName come custom_filter_state e due argomenti ("state" e "colName" con tipo "str").

Il file di configurazione .json di esempio è:

{ "name": "custom_filter_state", "displayName": "Filter State", "description": "A simple example to filter the data to keep only the state indicated.", "functionName": "custom_filter_state", "parameters": [ { "name": "colName", "displayName": "Column name", "type": "str", "description": "Name of the column in the data that holds the state postal code" }, { "name": "state", "displayName": "State postal code", "type": "str", "description": "The postal code of the state whole rows to keep" } ] }
Implementazione dello script complementare in Python
  1. Avvia un notebook AWS Glue ed esegui la cella iniziale fornita per l'avvio della sessione. L'esecuzione della cella iniziale crea i componenti di base necessari.

  2. Crea una funzione che esegua il filtraggio come descritto nell'esempio e registrala in DynamicFrame. Copia il codice seguente e incollalo in una cella del notebook AWS Glue.

    from awsglue import DynamicFrame def custom_filter_state(self, colName, state): return self.filter(lambda row: row[colName] == state) DynamicFrame.custom_filter_state = custom_filter_state
  3. Crea o carica dati di esempio per testare il codice nella stessa cella o in una nuova cella. Se aggiungi i dati di esempio in una nuova cella, non dimenticare di eseguire la cella. Per esempio:

    # A few of rows of sample data to test data_sample = [ {"state": "CA", "count": 4}, {"state": "NY", "count": 2}, {"state": "WA", "count": 3} ] df1 = glueContext.sparkSession.sparkContext.parallelize(data_sample).toDF() dynf1 = DynamicFrame.fromDF(df1, glueContext, None)
  4. Esegui test per convalidare "custom_filter_state" con diversi argomenti:

    Lo screenshot mostra una cella in un notebook AWS Glue con gli argomenti passati alla funzione dynamicFrame.show.
  5. Dopo aver eseguito diversi test, salva il codice con l'estensione .py e assegna al file .py un nome che rispecchi il nome del file .json. I file .py e .json devono trovarsi nella stessa cartella di trasformazione.

    Copia il codice seguente e incollalo in un file, quindi rinominalo con l'estensione .py.

    from awsglue import DynamicFrame def custom_filter_state(self, colName, state): return self.filter(lambda row: row[colName] == state) DynamicFrame.custom_filter_state = custom_filter_state
  6. In AWS Glue Studio, apri un processo visivo e aggiungi una trasformazione selezionandola tra quelle disponibili nell'elenco Transforms (Trasformazioni).

    Per riutilizzare questa trasformazione in un codice script Python, aggiungi il percorso Amazon S3 al file .py nel processo nel "Percorso dei file di riferimento" e nello script, importa il nome del file python (senza estensione) aggiungendolo all'inizio del file. Ad esempio: import <nome del file (senza estensione)>