PySpark in Azure Databricks
Azure Databricks si basa su Apache Spark, un motore di analisi unificato per Big Data e Machine Learning. PySpark consente di interfacciarsi con Apache Spark usando il linguaggio di programmazione Python, che è un linguaggio flessibile facile da apprendere, implementare e gestire. Offre anche molte opzioni per la visualizzazione dei dati in Databricks. PySpark combina la potenza di Python e Apache Spark.
Questo articolo offre una panoramica dei concetti fondamentali di PySpark in Databricks.
Introduzione ai concetti di Spark
È importante comprendere i concetti chiave di Apache Spark prima di approfondire l'uso di PySpark.
Frame di dati
I dataframe sono gli oggetti primari in Apache Spark. Un dataframe è un set di dati organizzato in colonne denominate. È possibile considerare un dataframe come un foglio di calcolo o una tabella SQL, una struttura di dati bidimensionale etichettata di una serie di record (simile alle righe di una tabella) e colonne di tipi diversi. I dataframe offrono un set completo di funzioni( ad esempio, selezionare colonne, filtrare, unire e aggregare) che consentono di eseguire in modo efficiente attività comuni di manipolazione e analisi dei dati.
Alcuni elementi importanti del dataframe includono:
- Schema: uno schema definisce i nomi di colonna e i tipi di un dataframe. I formati di dati hanno una semantica diversa per la definizione e l'imposizione dello schema. Alcune origini dati forniscono informazioni sullo schema, mentre altre si basano sulla definizione manuale dello schema o consentono l'inferenza dello schema. Gli utenti possono definire gli schemi manualmente o gli schemi possono essere letti da un'origine dati.
- Righe: Spark rappresenta i record in un dataframe come
Row
oggetti. Mentre i formati di dati sottostanti, ad esempio Delta Lake, usano colonne per archiviare i dati, per ottimizzare Spark memorizza nella cache e ri shuffle i dati usando righe. - Colonne: le colonne in Spark sono simili alle colonne di un foglio di calcolo e possono rappresentare un tipo semplice, ad esempio una stringa o un numero intero, ma anche tipi complessi come matrice, mapping o null. È possibile scrivere query che selezionano, modificano o rimuovono colonne da un'origine dati. Le origini dati possibili includono tabelle, viste, file o altri dataframe. Le colonne non vengono mai rimosse da un set di dati o da un dataframe, ma vengono semplicemente omesse dai risultati tramite
.drop
trasformazioni o omissioni nelleselect
istruzioni.
Elaborazione dati
Apache Spark usa la valutazione differita per elaborare trasformazioni e azioni definite con dataframe. Questi concetti sono fondamentali per comprendere l'elaborazione dei dati con Spark.
Trasformazioni: in Spark si esprime la logica di elaborazione come trasformazioni, che sono istruzioni per il caricamento e la modifica dei dati tramite dataframe. Le trasformazioni comuni includono la lettura di dati, join, aggregazioni e cast dei tipi. Per informazioni sulle trasformazioni in Azure Databricks, vedere Trasformare i dati.
Valutazione differita: Spark ottimizza l'elaborazione dei dati identificando il piano fisico più efficiente per valutare la logica specificata dalle trasformazioni. Tuttavia, Spark non agisce sulle trasformazioni finché non vengono chiamate azioni. Anziché valutare ogni trasformazione nell'ordine esatto specificato, Spark attende fino a quando un'azione attiva il calcolo su tutte le trasformazioni. Questa operazione è nota come valutazione differita o caricamento differito, che consente di concatenare più operazioni perché Spark gestisce l'esecuzione in modo posticipato, anziché eseguirle immediatamente quando vengono definite.
Nota
La valutazione differita indica che i dataframe archiviano le query logiche come set di istruzioni su un'origine dati anziché un risultato in memoria. Ciò varia drasticamente dall'esecuzione eager, ovvero il modello usato dai dataframe pandas.
Azioni: le azioni indicano a Spark di calcolare un risultato da una serie di trasformazioni in uno o più dataframe. Le operazioni di azione restituiscono un valore e possono essere le seguenti:
- Azioni per l'output dei dati nella console o nell'editor, ad esempio
display
oshow
- Azioni per raccogliere dati (restituisce
Row
oggetti), ad esempiotake(n)
, efirst
ohead
- Azioni da scrivere in origini dati, ad esempio
saveAsTable
- Aggregazioni che attivano un calcolo, ad esempio
count
Importante
Nelle pipeline di dati di produzione, la scrittura dei dati è in genere l'unica azione che deve essere presente. Tutte le altre azioni interrompono l'ottimizzazione delle query e possono causare colli di bottiglia.
Cosa significa che i dataframe non sono modificabili?
I dataframe sono una raccolta di trasformazioni e azioni definite su una o più origini dati, ma in definitiva Apache Spark risolve le query nelle origini dati originali, quindi i dati stessi non vengono modificati e non vengono modificati dataframe. In altre parole, i dataframe non sono modificabili. Per questo motivo, dopo l'esecuzione delle trasformazioni, viene restituito un nuovo dataframe che deve essere salvato in una variabile per accedervi nelle operazioni successive. Se si vuole valutare un passaggio intermedio della trasformazione, chiamare un'azione.
API e librerie
Come per tutte le API per Spark, PySpark è dotato di molte API e librerie che abilitano e supportano funzionalità avanzate, tra cui:
- Elaborazione di dati strutturati con query relazionali con Spark SQL e dataframe. Spark SQL consente di combinare query SQL con programmi Spark. Con i dataframe Spark è possibile leggere, scrivere, trasformare e analizzare in modo efficiente i dati usando Python e SQL, il che significa che si sfrutta sempre la potenza completa di Spark. Vedere Introduzione a PySpark.
- Elaborazione scalabile di flussi con Structured Streaming. È possibile esprimere il calcolo del flusso allo stesso modo in cui si esprime un calcolo batch su dati statici e il motore SQL Spark lo esegue in modo incrementale e continuo man mano che i dati di streaming continuano ad arrivare. Vedere Cenni preliminari su Structured Streaming.
- Strutture di dati Pandas e strumenti di analisi dei dati che funzionano su Apache Spark con l'API Pandas in Spark. L'API Pandas in Spark consente di ridimensionare il carico di lavoro pandas a qualsiasi dimensione eseguendolo distribuito tra più nodi, con una singola codebase che funziona con pandas (test, set di dati più piccoli) e con Spark (produzione, set di dati distribuiti). Vedere Panoramica dell'API Pandas in Spark.
- Algoritmi di Machine Learning con Machine Learning (MLLib). MLlib è una libreria di Machine Learning scalabile basata su Spark che fornisce un set uniforme di API che consentono agli utenti di creare e ottimizzare pipeline pratiche di Machine Learning. Vedere Panoramica della libreria di Machine Learning.
- Grafici e calcoli paralleli a grafo con GraphX. GraphX introduce un nuovo multigrafo diretto con proprietà associate a ogni vertice e bordo ed espone operatori di calcolo del grafo, algoritmi e generatori per semplificare le attività di analisi dei gragrafi. Vedere Cenni preliminari su GraphX.
Esercitazioni su Spark
Per esempi di utilizzo di PySpark in Databricks, vedere gli articoli seguenti:
La documentazione di Apache Spark include anche guide introduttive e guide per l'apprendimento di Spark, tra cui:
- Guida introduttiva ai dataframe PySpark
- Introduzione a Spark SQL
- Structured Streaming Programming Guide
- API Pandas in Spark QuickStart
- Guida alla programmazione della libreria di Machine Learning
Informazioni di riferimento su PySpark
Azure Databricks gestisce la propria versione delle API PySpark e i riferimenti corrispondenti, disponibili nelle sezioni seguenti: