Corso
Le soluzioni cloud-native sono sempre più popolari in vari settori grazie a sicurezza, flessibilità e scalabilità. Una di queste è AWS Glue, che semplifica l’elaborazione dei dati, un elemento chiave per prendere decisioni informate e ottimizzare le operazioni aziendali.
In questo tutorial useremo AWS Glue per mostrare un comune task ETL (Extract, Transform, Load): convertire file CSV archiviati in un bucket S3 in formato Parquet. Usare Parquet migliora sia l’efficienza dell’elaborazione sia le prestazioni delle query.
Presenteremo AWS Glue, le sue funzionalità principali e i vantaggi dell’automazione della preparazione dei dati. Poi ti guideremo nella configurazione dell’account AWS, nella creazione dei ruoli IAM e nell’impostazione dell’accesso al tuo bucket S3. Infine, vedremo come creare un crawler di Glue per scansionare i dataset e generare file Parquet.
Che cos’è AWS Glue?
Prima di passare alla pratica, capiamo cos’è AWS Glue e perché è utile per le attività di data processing.
AWS Glue è un servizio ETL completamente gestito che rende semplice preparare e caricare i dati per l’analisi. Offre un ambiente serverless per creare, eseguire e monitorare job ETL. AWS Glue scopre e profila automaticamente i tuoi dati tramite l’AWS Glue Data Catalog, suggerisce e genera codice ETL e fornisce uno scheduler flessibile per gestire dipendenze, monitoraggio e retry dei job.
Perché usare AWS Glue?
Capire i vantaggi di AWS Glue aiuta ad apprezzarne il valore nel flusso di elaborazione dei dati. Ecco alcuni motivi convincenti per usarlo, illustrati di seguito:

Perché scegliere AWS Glue? Immagine dell’autore
- Serverless: non c’è bisogno di effettuare il provisioning o gestire server, riducendo l’overhead operativo.
- Generazione automatica del codice: AWS Glue può generare automaticamente codice Python o Scala per i job ETL.
- Pianificazione e monitoraggio integrati dei job: questa funzionalità rende semplice pianificare e monitorare i job ETL.
- Scoperta e catalogazione dei dati: i crawler di AWS Glue possono scoprire, catalogare e preparare automaticamente i dati per l’analisi.
- Integrazione con altri servizi AWS: funziona senza problemi con servizi come Amazon S3, Amazon RDS, and Amazon Redshift.
- Conveniente: paghi solo per le risorse consumate durante l’esecuzione dei job ETL.
AWS Glue: guida passo dopo passo
Ed ecco la parte interessante: impariamo a usare Glue per un’attività di data processing molto comune, la conversione di file CSV in Parquet.
1. Configurazione dell’account AWS
Se sei nuovo su AWS, il primo passo è creare un account e poi accedere alla console di gestione.
- Vai su AWS e registrati.
- Una volta creato l’account, accedi all’AWS Management Console.
2. Creazione del ruolo IAM
AWS Identity and Access Management (IAM) consente di gestire in modo sicuro l’accesso ai servizi e alle risorse AWS.
Dobbiamo creare un ruolo IAM per consentire a Glue di accedere ai servizi rilevanti. Nel nostro caso, il servizio principale è S3, che ospita i nostri file CSV.
Il Tutorial sullo storage AWS è un ottimo modo per i nuovi utenti AWS di approfondire sistemi come S3.
I passaggi principali per creare quel ruolo IAM sono descritti di seguito, a partire dalla Management Console:
- Vai al servizio IAM.
- Fai clic su "Roles" nella barra laterale sinistra, poi su "Create role".
- Sotto "Choose a use case", seleziona "Glue" e fai clic su "Next: Permissions".
- Cerca e seleziona le seguenti policy:
AWSGlueServiceRoleAmazonS3FullAccess(Nota: in produzione dovresti creare una policy più restrittiva).- Dai un nome al ruolo (ad es. "GlueETLRole") ed eventualmente una descrizione, ma non è obbligatoria. Infine, fai clic su "Create role".

Passaggi per creare un ruolo IAM nella console AWS. Immagine dell’autore
La Guida completa a AWS IAM illustra i passaggi per usare IAM per mettere in sicurezza ambienti AWS, gestire l’accesso con utenti, gruppi e ruoli e descrivere le best practice per una sicurezza solida.
3. Configurazione del bucket S3
Salveremo sia i file CSV in input sia i file Parquet in output su Amazon S3.
I dati di input per questo esempio sono stati creati a scopo illustrativo e si trovano nel repository GitHub dell’autore:
athletes.csv: contiene informazioni sugli atleti, inclusi ID, nome, paese, sport ed età.events.csv: elenca vari eventi, inclusi ID evento, sport, nome evento, data e sede.medals.csv: registra le informazioni sulle medaglie, collegando eventi e atleti alle medaglie vinte.
Ora possiamo configurare il nostro bucket S3 come segue:
- Vai al servizio S3 nell’AWS Management Console.
- Fai clic su "Create bucket" e dagli un nome univoco (ad es. "my-glue-csv-etl-bucket").
- Lascia le impostazioni predefinite del bucket per semplicità e crea il bucket.
- Crea due cartelle nel tuo bucket: "input" e "output".

Flusso di creazione del bucket e delle cartelle S3. Immagine dell’autore
Dopo aver creato le due cartelle, il contenuto del tuo bucket dovrebbe apparire così:

Vista delle cartelle all’interno del bucket S3. Immagine dell’autore
Ora possiamo caricare questi file CSV di input nella cartella "input".

Contenuto della cartella “input” del bucket S3. Immagine dell’autore
4. Creazione di un crawler Glue
Un crawler Glue serve a scoprire e catalogare automaticamente i nostri dati. Questa sezione spiega come creare un crawler che scansioni tutti i file CSV in input.
I passaggi principali sono i seguenti:
- Vai al servizio AWS Glue nell’AWS Management Console.
- Nella barra laterale sinistra, sotto "Data catalog", fai clic su "Crawlers".
- Fai clic su "Create crawler".
- Dai un nome al crawler (ad es. "CSV-to-Parquet-Crawler") e lascia vuoto il campo descrizione, poi fai clic su "Next".
- Dobbiamo specificare “S3” come sorgente dati, scegliendo "Add data source" come tipo di sorgente del crawler e facendo clic su "Next".

Flusso di creazione del crawler AWS Glue nella console - parte 1. Immagine dell’autore
- Scegli "S3" come data store e specifica il percorso del tuo bucket S3, selezionando “Browse S3”. Poi fai clic su "Next".
- Seleziona “Crawl all sub-folders”.
- Seleziona “Add an S3 data source”, quindi fai clic su "Next".
- Prima di procedere, verifica il tipo di dati “S3”, poi “Next”.

Flusso di creazione del crawler AWS Glue nella console - parte 2. Immagine dell’autore
Dopo aver collegato il bucket S3, dobbiamo associare il ruolo IAM creato in precedenza per consentire a Glue di accedere ai bucket S3. Il nome del nostro ruolo è “GlueETLRole”.
- Scegli il nome del ruolo dal campo “Existing IAM role”.
- Fai clic su “Next”.

Flusso di creazione del crawler AWS Glue nella console - parte 3. Immagine dell’autore
Il passaggio successivo è creare un database. Il database “paris_olympics_db” che creeremo funge da repository centrale nell’AWS Glue Data Catalog per archiviare e organizzare i metadati dei nostri file CSV.
Il catalogo abiliterà una scoperta efficiente dei dati e semplificherà il nostro processo ETL per combinare e convertire i dati di atleti, eventi e medaglie in formato Parquet.
Al momento non abbiamo ancora alcun database e i passaggi per crearlo sono illustrati di seguito:
- Seleziona “Add database”, che aprirà una nuova finestra per la creazione del database. Assegnagli il nome “paris_olympics_db”, lasciando tutto il resto come predefinito, e fai clic su “Create database”.

Flusso di creazione del crawler AWS Glue nella console - parte 4. Immagine dell’autore
Dalla scheda originale in cui colleghiamo un database, aggiorna la sezione “Target database” e scegli il database appena creato. Poi fai clic su “Next”.

Flusso di creazione del crawler AWS Glue nella console - parte 5. Immagine dell’autore
Infine, rivedi tutto e fai clic su “Create crawler”.

Vista “Review and create” del crawler AWS Glue. Immagine dell’autore
Dopo aver creato il crawler, dovremmo vedere il seguente risultato che ne conferma la creazione:

Creazione del crawler Glue riuscita. Immagine dell’autore
5. Esecuzione di un crawler Glue
Ora che abbiamo creato il crawler, è il momento di eseguirlo e vedere come cataloga i nostri dati.

Pulsante “Run crawler” di Glue. Immagine dell’autore
- Seleziona il tuo crawler dall’elenco.
- Fai clic su "Run crawler".
- Attendi che il crawler finisca. Potrebbe richiedere alcuni minuti.
- Al termine, vai su "Databases" sotto "Data catalog" nella barra laterale sinistra.
- Fai clic sul database che è stato creato.
- Dovresti vedere una tabella che rappresenta la struttura dei tuoi dati CSV.

Vista delle tabelle create nel database dall’esecuzione del crawler Glue. Immagine dell’autore
6. Creazione ed esecuzione di un job Glue
Con il catalogo dati creato, possiamo ora creare un job Glue per combinare i nostri file CSV e convertirli in formato Parquet. Questa sezione ti guida nella creazione del job Glue e fornisce il codice Python necessario.
- Vai su "Jobs" sotto "ETL" nella console AWS Glue nella barra laterale sinistra.
- Seleziona lo Script editor per aprire un editor in cui scrivere codice Python e fai clic su “Create script”.

Creazione ed esecuzione di un job Glue - parte 1. Immagine dell’autore
La creazione dello script apre la seguente scheda in cui possiamo assegnare un nome al job, nel nostro caso “CS”.
- Nella sezione del codice, incolla il codice seguente, quindi fai clic su “Save”.

Creazione ed esecuzione di un job Glue - parte 2. Immagine dell’autore
Il codice Python corrispondente è riportato di seguito:
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from pyspark.sql.functions import col, to_date
# Initialize the Spark and Glue contexts
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
# Set Spark configurations for optimization
spark.conf.set("spark.sql.adaptive.enabled", "true")
spark.conf.set("spark.sql.adaptive.coalescePartitions.enabled", "true")
# Get job parameters
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
# Set the input and output paths
input_path = "s3://glue-csv-etl-bucket/input/"
output_path = "s3://glue-csv-etl-bucket/output/"
# Function to read CSV and write Parquet
def csv_to_parquet(input_file, output_file):
try:
# Read CSV
df = spark.read.option("header", "true") \
.option("inferSchema", "true") \
.option("mode", "PERMISSIVE") \
.option("columnNameOfCorruptRecord", "_corrupt_record") \
.csv(input_file)
# Print schema for debugging
print(f"Schema for {input_file}:")
df.printSchema()
# Convert date column if it exists (assuming it's in the format M/d/yyyy)
if "date" in df.columns:
df = df.withColumn("date", to_date(col("date"), "M/d/yyyy"))
# Write Parquet
df.write.mode("overwrite").parquet(output_file)
print(f"Successfully converted {input_file} to Parquet at {output_file}")
print(f"Number of rows processed: {df.count()}")
except Exception as e:
print(f"Error processing {input_file}: {str(e)}")
# List of files to process
files = ["athletes", "events", "medals"]
# Process each file
for file in files:
input_file = f"{input_path}{file}.csv"
output_file = f"{output_path}{file}_parquet"
csv_to_parquet(input_file, output_file)
job.commit()
print("Job completed.")
Vediamo brevemente cosa succede nel codice:
- Import: importa le librerie necessarie da AWS Glue, PySpark e dalla libreria standard di Python.
- Inizializzazione: inizializza i contesti Spark e Glue e imposta configurazioni Spark per l’ottimizzazione.
- Parametri del job: recupera i parametri del job, in particolare il nome del job, dagli argomenti della riga di comando.
- Percorsi: definisce i percorsi di input e output per i file CSV e Parquet nel bucket S3.
- Definizione di funzione: definisce la funzione
csv_to_parquet()per leggere un file CSV, stamparne lo schema, convertire una colonna di data se esiste e scrivere i dati come file Parquet. Gestisce le eccezioni durante l’elaborazione. - Elaborazione dei file: elabora un elenco di file (
athletes,events,medals) chiamando la funzionecsv_to_parquet()su ciascuno. - Commit del job: effettua il commit del job e stampa un messaggio di completamento.
Prima di eseguire il job, dobbiamo compilare le seguenti configurazioni aggiuntive nella sezione “Job details”:
- Fornisci il ruolo IAM creato in precedenza per consentire l’esecuzione del job.
- Imposta il “Type” del Job su “Spark”, lascia gli altri campi predefiniti e fai “Save”.
- Quindi, esegui il job!

Creazione ed esecuzione di un job Glue - parte 3. Immagine dell’autore
Dopo aver eseguito correttamente il job, possiamo vedere ulteriori dettagli sullo stato dell’esecuzione:

Vista dei dettagli di esecuzione del job AWS Glue. Immagine dell’autore
Accedere e monitorare i dettagli dell’esecuzione è importante per mantenere pipeline di dati efficienti e affidabili. Queste metriche forniscono informazioni preziose e aiutano a:
- Ottimizzazione delle prestazioni: tracciare i tempi di esecuzione per migliorare l’efficienza dei job e l’allocazione delle risorse.
- Gestione dei costi: monitorare l’uso delle risorse (DPU, worker) per allinearsi al budget e ottimizzare le spese.
- Pianificazione della capacità: usare le metriche di esecuzione per prevedere le esigenze di risorse e pianificare la scalabilità.
L’esecuzione riuscita di questo job ha convertito ciascun file CSV nel corrispondente file Parquet e li ha archiviati nella cartella “output” come mostrato di seguito:
- A sinistra troviamo cartelle con lo stesso nome del file CSV originale.
- La parte a destra corrisponde ai file Parquet per ciascun file CSV.

Contenuto della cartella di output all’interno del bucket S3. Immagine dell’autore
Conclusioni e prossimi passi
Questo tutorial ha trattato AWS Glue e le sue funzionalità. Ti ha guidato nella configurazione di un ambiente AWS e nell’esplorazione dell’interfaccia AWS Glue. Ti ha anche mostrato come creare ed eseguire un crawler Glue per catalogare i dati, creare un job Glue per trasformarli e convertire con successo i file CSV in formato Parquet.
Puoi ampliare quanto appreso impostando trigger per automatizzare i workflow, implementando gestione degli errori e logging e ottimizzando i file Parquet per prestazioni ancora migliori. Puoi anche esplorare l’esecuzione di query sui tuoi dati con AWS Athena o Amazon Redshift Spectrum.
Inoltre, monitora l’utilizzo e i costi AWS e pulisci le risorse quando non sono più necessarie per evitare addebiti inutili.
I corsi Introduction to AWS e AWS Cloud Technology and Services possono essere ottimi prossimi passi per continuare a imparare!
Il primo offre basi solide su AWS e cloud computing, ideale per chi inizia o vuole ripassare i concetti chiave. Il secondo è incentrato sull’apprendimento pratico, per approfondire l’uso dei servizi AWS.
FAQs
Quali sono le best practice per ottimizzare le prestazioni dei file Parquet?
Per ottimizzare le prestazioni dei file Parquet, valuta di regolare le dimensioni dei file (l’ideale è tra 128 MB e 1 GB), partizionare i dati per query efficienti e impostare il codec di compressione appropriato (come Snappy o Gzip). Queste strategie riducono l’I/O e migliorano la velocità delle query quando lavori con dataset di grandi dimensioni in strumenti come AWS Athena.
Come posso implementare la gestione degli errori e il logging nei job AWS Glue?
AWS Glue si integra con Amazon CloudWatch, permettendoti di tracciare stato dei job, errori e log personalizzati. Puoi configurare i tuoi job Glue per scrivere i log su CloudWatch, facilitando il monitoraggio delle prestazioni, la risoluzione dei problemi e l’esecuzione fluida dei processi ETL.
Quali sono alcuni casi d’uso comuni di AWS Glue oltre la conversione da CSV a Parquet?
AWS Glue è versatile e può gestire attività come deduplicazione, arricchimento e trasformazioni di schema. È comunemente usato per integrare dati da più fonti (ad es. RDS, S3, Redshift) in un formato unificato, preparare dati per modelli di machine learning e svolgere trasformazioni per data lake.
Come si confronta AWS Glue con altri strumenti ETL come Apache Airflow o Databricks?
AWS Glue è un servizio ETL completamente gestito e serverless, mentre Apache Airflow è uno strumento open-source di orchestrazione di workflow che richiede più configurazione e gestione dell’infrastruttura. Databricks, invece, è pensato per analisi dati e machine learning su larga scala. AWS Glue è ottimo per facilità d’uso e integrazione con altri servizi AWS, ma per workflow altamente complessi strumenti come Airflow o Databricks possono offrire maggiore flessibilità.
Come posso automatizzare i job AWS Glue con i trigger?
I trigger in AWS Glue ti permettono di automatizzare i workflow ETL pianificando i job perché vengano eseguiti in orari specifici o dopo determinati eventi, ad esempio quando arrivano nuovi dati in un bucket S3. Puoi impostare trigger basati su tempo o eventi tramite la console AWS Glue, abilitando un’elaborazione dei dati senza intervento manuale.
Un data scientist poliedrico che ama condividere le proprie conoscenze e restituire valore agli altri, Zoumana è un content creator su YouTube e un top writer tech su Medium. Trova soddisfazione nel parlare in pubblico, programmare e insegnare. Zoumana ha due lauree magistrali: la prima in informatica con specializzazione in Machine Learning conseguita a Parigi, Francia, e la seconda in Data Science alla Texas Tech University negli Stati Uniti. Ha iniziato la sua carriera come Software Developer presso Groupe OPEN in Francia, per poi passare a IBM come Machine Learning Consultant, dove ha sviluppato soluzioni di IA end-to-end per compagnie assicurative. Successivamente, è entrato in Axionable, la prima startup di Sustainable AI con sede a Parigi e Montréal. Lì ha lavorato come Data Scientist e ha implementato prodotti di IA, principalmente casi d’uso di NLP, per clienti in Francia, Montréal, Singapore e Svizzera. Inoltre, ha dedicato il 5% del suo tempo ad attività di Ricerca e Sviluppo. Attualmente lavora come Senior Data Scientist presso IFC - World Bank Group.


