Spark SQL je modul Sparku pro zpracování strukturovaných dat. Na rozdíl od základního rozhraní API Spark RDD poskytují rozhraní poskytovaná Spark SQL Sparku více informací o struktuře dat i prováděných výpočtů. Interně Spark SQL tyto dodatečné informace využívá k provádění dodatečných optimalizací. Existuje několik způsobů, jakinteragovat se Spark SQL, včetně SQL a Dataset API. Při výpočtu výsledku se používá stejný prováděcí engine nezávisle na tom, které API/jazyk používáte k vyjádření výpočtu. Toto sjednocení znamená, že vývojáři mohou snadno přepínat mezi různými rozhraními API podle toho, které poskytuje nejpřirozenější způsob vyjádření dané transformace.
Všechny příklady na této stránce používají vzorová data obsažená v distribuci Spark a lze je spustit v shellu spark-shell
, pyspark
nebo sparkR
.
SQL
Jedním z použití Spark SQL je provádění dotazů SQL.Spark SQL lze také použít ke čtení dat ze stávající instalace Hive. Více informací o tom, jak tuto funkcikonfigurovat, naleznete v části Tabulky Hive. Při spuštěníSQL z jiného programovacího jazyka budou výsledky vráceny jako Dataset/DataFrame.S rozhraním SQL můžete také komunikovat pomocí příkazového řádku nebo přes JDBC/ODBC.
Datasets and DataFrames
Dataset je distribuovaná kolekce dat.Dataset je nové rozhraní přidané ve Sparku 1.6, které poskytuje výhody RDD (silné typování, možnost používat výkonné lambda funkce) s výhodami optimalizovanéhoprocesoru Spark SQL. Dataset lze sestavit z objektů JVM a následně s ním manipulovat pomocí funkčních transformací (map
, flatMap
, filter
atd.) Dataset API je k dispozici v jazycích Scala aJava. Jazyk Python nemá podporu rozhraní Dataset API. Ale vzhledem k dynamické povaze jazyka Pythonje mnoho výhod rozhraní Dataset API již k dispozici (např. můžete přirozeně přistupovat k poli řádku podle jménarow.columnName
). Podobně je tomu i v případě R.
DataFrame je Dataset uspořádaný do pojmenovaných sloupců. Je koncepčně ekvivalentní tabulce v relační databázi nebo datovému rámci v R/Pythonu, ale s bohatšími optimalizacemi pod kapotou. DataFrame lze vytvořit ze široké škály zdrojů, jako jsou: strukturované datové soubory, tabulky v Hive, externí databáze nebo existující RDD.Rozhraní API DataFrame je k dispozici v jazycích Scala,Java, Python a R.V jazycích Scala a Java je DataFrame reprezentován datovou sadou Row
.V rozhraní Scala API je DataFrame
jednoduše alias typu Dataset
, zatímco v rozhraní Java API musí uživatelé pro reprezentaci DataFrame
použít Dataset<Row>
.
V celém tomto dokumentu budeme často označovat datové sady Scala/Java Row
s jako DataFrame.
.