Spark SQL ist ein Spark-Modul für strukturierte Datenverarbeitung. Im Gegensatz zur grundlegenden Spark RDD-API bieten die von Spark SQL bereitgestellten Schnittstellen Spark mehr Informationen über die Struktur der Daten und die durchgeführte Berechnung. Intern verwendet Spark SQL diese zusätzlichen Informationen, um zusätzliche Optimierungen durchzuführen. Es gibt mehrere Möglichkeiten, mit Spark SQL zu interagieren, darunter SQL und die Dataset-API. Bei der Berechnung eines Ergebnisses wird dieselbe Ausführungsengine verwendet, unabhängig davon, welche API/Sprache Sie zum Ausdrücken der Berechnung verwenden. Diese Vereinheitlichung bedeutet, dass Entwickler problemlos zwischen verschiedenen APIs hin- und herwechseln können, je nachdem, welche die natürlichste Möglichkeit bietet, eine bestimmte Transformation auszudrücken.
Alle Beispiele auf dieser Seite verwenden Beispieldaten, die in der Spark-Distribution enthalten sind, und können in der spark-shell
-, pyspark
– oder sparkR
-Shell ausgeführt werden.
SQL
Eine Verwendung von Spark SQL ist die Ausführung von SQL-Abfragen.Spark SQL kann auch verwendet werden, um Daten aus einer vorhandenen Hive-Installation zu lesen. Weitere Informationen zum Konfigurieren dieser Funktion finden Sie im Abschnitt Hive-Tabellen. Wenn Sie SQL in einer anderen Programmiersprache ausführen, werden die Ergebnisse als Dataset/DataFrame zurückgegeben. Sie können auch über die Befehlszeile oder über JDBC/ODBC mit der SQL-Schnittstelle interagieren.
Datasets und DataFrames
Ein Dataset ist eine verteilte Sammlung von Daten.Dataset ist eine neue, in Spark 1.6 hinzugefügte Schnittstelle, die die Vorteile von RDDs (starke Typisierung, Möglichkeit zur Verwendung leistungsstarker Lambda-Funktionen) mit den Vorteilen der optimierten Ausführungs-Engine von Spark SQL verbindet. Ein Dataset kann aus JVM-Objekten konstruiert und dann mit funktionalen Transformationen (map
, flatMap
, filter
usw.) manipuliert werden.Die Dataset-API ist in Scala und Java verfügbar. Python bietet keine Unterstützung für die Dataset-API. Aber aufgrund der dynamischen Natur von Python sind viele der Vorteile der Dataset-API bereits verfügbar (z. B. können Sie auf das Feld einer Zeile natürlich über den Namen zugreifenrow.columnName
). Der Fall für R ist ähnlich.
Ein DataFrame ist ein Dataset, das in benannten Spalten organisiert ist. Er ist konzeptionell äquivalent zu einer Tabelle in einer relationalen Datenbank oder einem Datenrahmen in R/Python, aber mit reichhaltigen Optimierungen unter der Haube. DataFrames können aus einer Vielzahl von Quellen erstellt werden, z. B. aus strukturierten Datendateien, Tabellen in Hive, externen Datenbanken oder vorhandenen RDDs.Die DataFrame-API ist in Scala, Java, Python und R verfügbar.In Scala und Java wird ein DataFrame durch ein Dataset von Row
s dargestellt.In der Scala-API ist DataFrame
einfach ein Typ-Alias von Dataset
, während Benutzer in der Java-API Dataset<Row>
verwenden müssen, um ein DataFrame
darzustellen.
In diesem Dokument werden wir uns oft auf Scala/Java-Datensätze von Row
s als DataFrames beziehen.