🐍 PySpark Master Guide & Documentation
1. Introduzione e Concetti Chiave
PySpark è l'interfaccia Python per Apache Spark. Permette l'elaborazione distribuita di grandi moli di dati (Big Data) utilizzando la semplicità di Python combinata con la potenza del motore Spark.
Perché imparare PySpark?
- Calcolo Distribuito: Esegue calcoli in parallelo su cluster di macchine, riducendo drasticamente i tempi di elaborazione.
- Fault Tolerance: Grazie al concetto di lineage negli RDD, Spark può ricalcolare automaticamente i dati persi in caso di guasti ai nodi.
- Lazy Evaluation (Pigrizia Intelligente): Spark non esegue immediatamente le trasformazioni (come
map o filter). Costruisce prima un piano di esecuzione (DAG). Il calcolo parte solo quando richiedi un risultato finale (Azione). Questo permette a Spark di ottimizzare il percorso, scartando operazioni inutili prima di iniziare.
- Data Locality: A differenza dei sistemi tradizionali che spostano i dati verso la CPU, Spark sposta il codice (pochi KB) verso i nodi dove risiedono i dati (Terabyte), abbattendo i tempi di trasferimento di rete (spesso il vero collo di bottiglia).
2. Architettura del Cluster
Spark utilizza un'architettura Master-Slave. È fondamentale capire "chi fa cosa" per scrivere codice efficiente.
Componenti Principali
- Driver Program: Il "cervello" (il tuo script Python/Notebook). Contiene lo
SparkContext, definisce le trasformazioni e invia il codice ai lavoratori.
- Executors (Workers): I "bracci". Sono i processi distribuiti sui nodi del cluster che eseguono materialmente i calcoli e salvano i dati in cache/memoria.
- Cluster Manager: (Es. YARN, Mesos, Kubernetes) Gestisce le risorse fisiche (CPU/RAM) per il Driver e gli Executors.
Il DAG (Directed Acyclic Graph)
Quando scrivi codice, Spark costruisce internamente un grafo delle dipendenze (DAG). Ogni nodo del grafo è una trasformazione logica. Spark usa questo grafo per pianificare l'esecuzione spezzettandola in Stages (fasi) e Tasks.
Spark Connect (Nov 2025): Nella versione 4.0+, PySpark supporta anche un'architettura client-server disaccoppiata ("Spark-as-a-Service"), dove il client è leggero e si connette a un cluster remoto.