Spark SQL är en Spark-modul för strukturerad databehandling. Till skillnad från det grundläggande Spark RDD API:et ger de gränssnitt som tillhandahålls av Spark SQL Spark mer information om strukturen på både data och den beräkning som utförs. Internt använder Spark SQL denna extra information för att utföra extra optimeringar. Det finns flera sätt att interagera med Spark SQL, inklusive SQL och Dataset API. Vid beräkning av ett resultat används samma exekveringsmotor, oberoende av vilket API/språk du använder för att uttrycka beräkningen. Denna förening innebär att utvecklare enkelt kan växla fram och tillbaka mellan olika API:er beroende på vilket som ger det mest naturliga sättet att uttrycka en viss omvandling.
Alla exempel på den här sidan använder exempeldata som ingår i Spark-distributionen och kan köras i spark-shell
, pyspark
skalet eller sparkR
skalet.
SQL
En av användningsområdena för Spark SQL är att utföra SQL-förfrågningar.Spark SQL kan också användas för att läsa data från en befintlig Hive-installation. Mer information om hur du konfigurerar den här funktionen finns i avsnittet Hive Tables. När du körSQL från ett annat programmeringsspråk returneras resultaten som en Dataset/DataFrame.Du kan också interagera med SQL-gränssnittet med hjälp av kommandoraden eller via JDBC/ODBC.
Datasets and DataFrames
En Dataset är en distribuerad samling av data.Dataset är ett nytt gränssnitt som lades till i Spark 1.6 och som ger fördelarna med RDDs (stark typning, möjlighet att använda kraftfulla lambdafunktioner) med fördelarna med Spark SQL:s optimerade exekveringsmotor. En Dataset kan konstrueras från JVM-objekt och sedan manipuleras med hjälp av funktionella transformationer (map
, flatMap
, filter
etc.) Dataset API finns tillgängligt i Scala och Java. Python har inte stöd för Dataset API. Men på grund av Pythons dynamiska natur är många av fördelarna med Dataset API redan tillgängliga (t.ex. kan du få tillgång till fältet i en rad genom namnet naturligtrow.columnName
). Fallet för R är liknande.
En DataFrame är en Dataset organiserad i namngivna kolumner. Det är konceptuellt likvärdigt med en tabell i en relationsdatabas eller en dataruta i R/Python, men med rika optimeringar under huven. DataFrames kan konstrueras från ett stort antal källor, t.ex. strukturerade datafiler, tabeller i Hive, externa databaser eller befintliga RDD:s. DataFrame API:et finns tillgängligt i Scala, Java, Python och R. I Scala och Java representeras en DataFrame av en Dataset av Row
s.I Scala API är DataFrame
helt enkelt ett typalias för Dataset
.I Java API måste användarna använda Dataset<Row>
för att representera DataFrame
.
I det här dokumentet kommer vi ofta att hänvisa till Scala/Java Datasets of Row
s som DataFrames.