Che cos'è l'API Spark DataFrame?

Apache Spark è un motore di elaborazione distribuita progettato per elaborare dati strutturati, semistrutturati e non strutturati su larga scala. Per interagire con il motore e definire operazioni di dati distribuite, gli sviluppatori utilizzano l'API Spark.


Al centro dello sviluppo moderno di Spark c'è l'API Spark DataFrame. Un DataFrame organizza ed elabora i dati distribuiti in colonne denominate, in modo simile a una tabella in un database relazionale o in un foglio di lavoro. Fornisce un'interfaccia strutturata e dichiarativa per analizzare set di dati di grandi dimensioni, ottimizzando automaticamente l'esecuzione fisica dietro le quinte.

Architettura ed esecuzione dell'API Spark

Per capire come l'API Spark esegue il codice su una rete distribuita, è importante comprendere i componenti di base della sua architettura di runtime:


  • Driver: il coordinatore centrale dell'applicazione Spark. Legge il codice, traduce le operazioni dichiarative in piani di esecuzione logici e pianifica le attività tra i nodi worker.
  • Gestore cluster: l'allocatore di risorse (come Kubernetes o gestori di risorse autonomi) che esegue il provisioning di CPU, memoria e risorse di rete nel cluster.
  • Esecutori: le istanze worker in esecuzione sui nodi del cluster. Ricevono le istruzioni per le attività dal driver, eseguono le operazioni di elaborazione dei dati localmente in memoria e restituiscono i risultati o li scrivono nello spazio di archiviazione.
  • DAG, fasi e attività: Spark non esegue le trasformazioni dei dati riga per riga. Invece, il driver compila il codice DataFrame in un grafo diretto aciclico (DAG) di operatori fisici. Il driver raggruppa questi operatori in ampie fasi di esecuzione chiamate stage, che sono divise da confini di shuffling dei dati, e suddivide questi stage in singole attività distribuite agli esecutori per l'esecuzione parallela.

Qual è la differenza tra RDD e DataFrame di Spark?

Quando progettano pipeline di dati distribuite, gli sviluppatori scelgono tra due interfacce di programmazione principali:


  • Spark RDD (Resilient Distributed Dataset): l'API Spark originale di basso livello. Rappresenta una raccolta immutabile e a tolleranza di errore di oggetti JVM distribuiti in un cluster. Poiché gli RDD contengono oggetti Java arbitrari, il motore di esecuzione non può ispezionare la loro struttura interna. Questo costringe gli sviluppatori a scrivere e ottimizzare manualmente la logica di trasformazione di basso livello, con conseguente sovraccarico significativo della garbage collection e serializzazione lenta.
  • Spark DataFrame: lo standard moderno per l'elaborazione di dati strutturati. I DataFrame organizzano i dati in righe e colonne definite da uno schema rigoroso. Poiché il motore di esecuzione comprende i tipi di dati e la struttura del set di dati, può ottimizzare automaticamente il codice prima di eseguirlo.

Perché scegliere i DataFrame rispetto agli RDD?

Per quasi tutti i casi d'uso di data engineering e data science, l'API DataFrame è la scelta preferita. Gli RDD sono riservati agli scenari in cui è necessario manipolare dati non strutturati non elaborati (come file binari o stream multimediali) utilizzando oggetti Java personalizzati. I DataFrame richiedono meno codice, vengono eseguiti automaticamente più velocemente e utilizzano la gestione della memoria binaria off-heap per bypassare i colli di bottiglia della garbage collection della JVM.

Come i team di dati utilizzano l'API Spark

L'API Spark DataFrame semplifica le attività di elaborazione, pulizia e preparazione di grandi volumi di dati, che richiedono un'elevata potenza di calcolo.


  • Data engineer: i data engineer utilizzano l'API DataFrame per creare pipeline di dati resilienti e a tolleranza di errore. Estraggono i dati non elaborati, applicano gli schemi, eseguono trasformazioni strutturate e scrivono tabelle conformi in data lake o data warehouse su cloud. La sintassi dichiarativa consente di elaborare terabyte di dati ogni giorno, riducendo al minimo la complessità del codice e l'overhead di manutenzione.
  • Data scientist: i data scientist utilizzano l'API DataFrame per esplorare e preparare set di dati di grandi dimensioni che superano i limiti di memoria di una singola macchina. Distribuendo le partizioni di dati tra i nodi worker, possono eseguire analisi esplorative dei dati, pulire i valori nulli e progettare funzionalità su larga scala, accelerando il time-to-insight.

Librerie principali basate sull'API DataFrame

L'API Spark DataFrame funge da base programmatica per le librerie di elaborazione avanzate di Spark:


  • Spark SQL: questo modulo consente di eseguire query SQL ANSI direttamente sui set di dati Spark. Puoi eseguire query sui DataFrame come viste temporanee, combinando perfettamente il codice dichiarativo Python o Scala con query SQL standard.
  • Structured Streaming: questo motore elabora flussi continui di dati in tempo reale. Utilizza gli stessi comandi dell'API DataFrame dell'elaborazione batch statica, gestendo automaticamente il micro-batching, la tolleranza di errore e la gestione dello stato.
  • MLlib: la libreria di machine learning distribuita di Spark utilizza i DataFrame per gestire e preparare i set di dati di addestramento, fornendo algoritmi integrati e scalabili per classificazione, regressione, clustering e filtro collaborativo.

Vantaggi dell'API Spark DataFrame

Ottimizzazione dichiarativa

I DataFrame utilizzano un ottimizzatore di query integrato chiamato Catalyst Optimizer. Quando scrivi il codice DataFrame, l'ottimizzatore riscrive automaticamente il piano di esecuzione fisico applicando il pushdown dei filtri, la riduzione delle proiezioni e il riordino dei join per l'esecuzione più rapida possibile senza ottimizzazione manuale.

Flessibilità linguistica

Che il tuo team scriva codice in Python (PySpark), Scala, Java o R, l'API DataFrame garantisce prestazioni identiche. Il piano di esecuzione sottostante viene compilato e ottimizzato all'interno dello stesso livello di esecuzione indipendente dalla JVM.

Gestione efficiente della memoria

I DataFrame utilizzano il motore di esecuzione Tungsten per archiviare i dati in un formato binario off-heap altamente compresso. In questo modo si elimina l'overhead di creazione degli oggetti JVM e si evita che le pause di garbage collection blocchino i thread dell'esecutore.

Come utilizzare l'API Spark DataFrame su Google Cloud

L'esecuzione di Spark open source richiede tradizionalmente la configurazione manuale del cluster, la gestione della versione del software e un peering di rete complesso. Google Cloud semplifica questo processo offrendo Managed Service for Apache Spark, che trasforma l'esecuzione distribuita in una piattaforma di dati completamente gestita e pronta per l'uso aziendale.


I team di dati eseguono i carichi di lavoro Spark DataFrame su Google Cloud utilizzando le seguenti funzionalità:


  • Deployment di cluster serverless e gestiti: Google Cloud ti consente di scegliere il modello di esecuzione più adatto alle tue esigenze operative. Puoi eseguire il codice DataFrame in modalità serverless per inviare direttamente i job batch, pagando solo per i secondi esatti di runtime mentre le risorse scalano automaticamente, oppure eseguire il deployment di cluster gestiti persistenti e altamente personalizzabili per workload continui.
  • Connettività BigQuery ottimizzata: il connettore Spark-BigQuery bypassa le transizioni orientate alle righe della JVM consumando i dati di BigQuery direttamente nel formato nativo Apache Arrow. I data scientist possono anche utilizzare un'interfaccia notebook integrata per eseguire codice PySpark DataFrame e query SQL sullo stesso set di dati regolamentato senza cambiare ambiente.
  • Esecuzione C++ nativa vettorizzata: quando esegui workload Spark su Google Cloud, puoi abilitare Lightning Engine per i tuoi batch serverless o cluster gestiti. Questo motore di esecuzione delle query C++ nativo compila i piani di query fisici direttamente in istruzioni native utilizzando Velox e Gluten. Aggirando il modello di iteratore Volcano della JVM e i colli di bottiglia della garbage collection, accelera i workload DataFrame e Spark SQL fino a 4,9 volte senza modifiche al codice.


Fai il prossimo passo

Inizia a creare su Google Cloud con 300 $ di crediti gratuiti e oltre 20 prodotti Always Free.

Google Cloud