Spark SQL to moduł Sparka do przetwarzania danych strukturalnych. W przeciwieństwie do podstawowego API Spark RDD, interfejsy udostępniane przez Spark SQL dostarczają Spark więcej informacji o strukturze zarówno danych, jak i wykonywanych obliczeń. Wewnętrznie, Spark SQL wykorzystuje te dodatkowe informacje do wykonywania dodatkowych optymalizacji. Istnieje kilka sposobów interakcji ze Spark SQL, w tym SQL i Dataset API. Podczas obliczania wyniku, używany jest ten sam silnik wykonawczy, niezależnie od tego, jakiego API/języka używasz do wyrażania obliczeń. Ta unifikacja oznacza, że programiści mogą łatwo przełączać się pomiędzy różnymi API w zależności od tego, które z nich zapewnia najbardziej naturalny sposób wyrażenia danej transformacji.
Wszystkie przykłady na tej stronie wykorzystują przykładowe dane zawarte w dystrybucji Spark i mogą być uruchamiane w powłoce spark-shell
, pyspark
lub sparkR
.
SQL
Jednym z zastosowań Spark SQL jest wykonywanie zapytań SQL.Spark SQL może być również używany do odczytywania danych z istniejącej instalacji Hive. Więcej informacji na temat konfigurowania tej funkcji znajduje się w sekcji Tabele Hive. Kiedy uruchamiamy SQL z innego języka programowania, wyniki zostaną zwrócone jako Dataset/DataFrame.Można również współdziałać z interfejsem SQL za pomocą wiersza poleceń lub poprzez JDBC/ODBC.
Datasets and DataFrames
Dataset jest rozproszoną kolekcją danych.Dataset jest nowym interfejsem dodanym w Spark 1.6, który zapewnia korzyści z RDD (silne typowanie, możliwość użycia potężnych funkcji lambda) z korzyściami zoptymalizowanego silnika wykonawczego Spark SQL. Dataset może być skonstruowany z obiektów JVM i następnie manipulowany przy użyciu funkcjonalnych transformacji (map
, flatMap
, filter
, itd.).Dataset API jest dostępny w Scali i Javie. Python nie posiada wsparcia dla Dataset API. Jednak ze względu na dynamiczną naturę Pythona wiele zalet Dataset API jest już dostępnych (np. można uzyskać dostęp do pola wiersza według nazwy w sposób naturalnyrow.columnName
). W przypadku R jest podobnie.
DataFrame jest zbiorem danych zorganizowanym w nazwane kolumny. Jest to koncepcyjnie odpowiednik tabeli w relacyjnej bazie danych lub ramki danych w R/Pythonie, ale z bogatymi optymalizacjami pod maską. DataFrames mogą być tworzone z szerokiej gamy źródeł takich jak: pliki danych strukturalnych, tabele w Hive, zewnętrzne bazy danych lub istniejące RDD.API DataFrame jest dostępne w Scali, Javie, Pythonie i R.W Scali i Javie DataFrame jest reprezentowane przez Dataset składający się z Row
s.W Scala API, DataFrame
jest po prostu aliasem typu Dataset
.Podczas gdy w Java API, użytkownicy muszą używać Dataset<Row>
do reprezentowania DataFrame
.
W całym tym dokumencie, będziemy często odnosić się do Scala/Java Datasets of Row
s jako DataFrames.
.