Spark SQL è un modulo Spark per l’elaborazione di dati strutturati. A differenza dell’API di base di Spark RDD, le interfacce fornite da Spark SQL forniscono a Spark più informazioni sulla struttura dei dati e sul calcolo che viene eseguito. Internamente, Spark SQL usa queste informazioni extra per eseguire ottimizzazioni extra. Ci sono diversi modi per interagire con Spark SQL tra cui SQL e l’API Dataset. Quando si calcola un risultato, viene usato lo stesso motore di esecuzione, indipendentemente da quale API/linguaggio si sta usando per esprimere il calcolo. Questa unificazione significa che gli sviluppatori possono facilmente passare avanti e indietro tra diverse API in base a quale fornisce il modo più naturale di esprimere una data trasformazione.
Tutti gli esempi in questa pagina utilizzano dati di esempio inclusi nella distribuzione Spark e possono essere eseguiti nella spark-shell
, pyspark
shell, o sparkR
shell.
SQL
Un uso di Spark SQL è quello di eseguire query SQL.Spark SQL può anche essere utilizzato per leggere i dati da un’installazione Hive esistente. Per ulteriori informazioni su come configurare questa funzione, si prega di fare riferimento alla sezione Tabelle Hive. Quando si esegue SQL dall’interno di un altro linguaggio di programmazione, i risultati saranno restituiti come Dataset/DataFrame.Si può anche interagire con l’interfaccia SQL usando la riga di comando o tramite JDBC/ODBC.
Datasets e DataFrames
Un Dataset è una collezione distribuita di dati.Dataset è una nuova interfaccia aggiunta in Spark 1.6 che fornisce i benefici degli RDD (strongtyping, capacità di usare potenti funzioni lambda) con i benefici del motore di esecuzione ottimizzato di Spark SQL. Un Dataset può essere costruito da oggetti JVM e poi manipolato usando trasformazioni funzionali (map
, flatMap
, filter
, ecc.) L’API Dataset è disponibile in Scala e Java. Python non ha il supporto per l’API Dataset. Ma a causa della natura dinamica di Python, molti dei vantaggi dell’API Dataset sono già disponibili (ad esempio, è possibile accedere al campo di una riga per nome naturalmenterow.columnName
). Il caso di R è simile.
Un DataFrame è un Dataset organizzato in colonne con nome. È concettualmente equivalente a una tabella in un database relazionale o a un data frame in R/Python, ma con ricche ottimizzazioni sotto il cappuccio. I DataFrame possono essere costruiti da una vasta gamma di fonti come: file di dati strutturati, tabelle in Hive, database esterni o RDD esistenti.L’API DataFrame è disponibile in Scala, Java, Python e R. In Scala e Java, un DataFrame è rappresentato da un Dataset di Row
s.Nell’API di Scala, DataFrame
è semplicemente un alias di tipo Dataset
.Mentre, nell’API di Java, gli utenti devono usare Dataset<Row>
per rappresentare un DataFrame
.
In tutto questo documento, ci riferiremo spesso a Scala/Java Datasets di Row
s come DataFrames.