Spark SQL este un modul Spark pentru procesarea datelor structurate. Spre deosebire de API-ul de bază Spark RDD, interfețele furnizate de Spark SQL îi oferă lui Spark mai multe informații despre structura atât a datelor, cât și a calculului care se efectuează. La nivel intern,Spark SQL utilizează aceste informații suplimentare pentru a efectua optimizări suplimentare. Există mai multe modalități de ainteracționa cu Spark SQL, inclusiv SQL și Dataset API. Atunci când se calculează un rezultat, se utilizează același motor de execuție, indiferent de API/limbajul pe care îl utilizați pentru a exprima calculul. Această unificare înseamnă că dezvoltatorii pot trece cu ușurință de la o API la alta în funcție de cea care oferă cel mai natural mod de a exprima o anumită transformare.
Toate exemplele de pe această pagină utilizează exemple de date incluse în distribuția Spark și pot fi rulate în shell-ul spark-shell
, pyspark
sau sparkR
.
SQL
O singură utilizare a Spark SQL este executarea de interogări SQL.Spark SQL poate fi, de asemenea, utilizat pentru a citi date dintr-o instalație Hive existentă. Pentru mai multe informații despre cum săconfigurați această funcție, consultați secțiunea Tabele Hive. Atunci când executați SQL din cadrul unui alt limbaj de programare, rezultatele vor fi returnate sub forma unui Dataset/DataFrame.De asemenea, puteți interacționa cu interfața SQL folosind linia de comandă sau prin JDBC/ODBC.
Datasets and DataFrames
Un Dataset este o colecție distribuită de date.Dataset este o nouă interfață adăugată în Spark 1.6 care oferă beneficiile RDD-urilor (strongtyping, capacitatea de a utiliza funcții lambda puternice) cu beneficiile motorului de execuție optimizat al Spark SQL. Un Dataset poate fi construit din obiecte JVM și apoimanipulat folosind transformări funcționale (map
, flatMap
, filter
, etc.).API-ul Dataset este disponibil în Scala șiJava. Python nu dispune de suport pentru Dataset API. Dar, datorită naturii dinamice a lui Python,multe dintre avantajele oferite de Dataset API sunt deja disponibile (de exemplu, puteți accesa câmpul unui rând după nume în mod naturalrow.columnName
). Cazul pentru R este similar.
Un DataFrame este un Dataset organizat în coloane cu nume. Este conceptualechivalent cu un tabel într-o bază de date relațională sau cu un cadru de date în R/Python, dar cu bogate optimizări sub capotă. DataFrame-urile pot fi construite dintr-o gamă largă de surse, cum ar fi: fișiere de date structurate, tabele în Hive, baze de date externe sau RDD-uri existente.API-ul DataFrame este disponibil în Scala, Java, Python și R.În Scala și Java, un DataFrame este reprezentat de un Dataset de Row
s.În API Scala, DataFrame
este pur și simplu un alias de tip al lui Dataset
.În timp ce, în API Java, utilizatorii trebuie să folosească Dataset<Row>
pentru a reprezenta un DataFrame
.
În acest document, ne vom referi adesea la seturile de date Scala/Java de Row
s ca DataFrame.
.