Ich bin neu in Spark und Spark SQL.
Wie funktioniert createOrReplaceTempView
in Spark?
Wenn wir eine RDD
von Objekten als Tabelle registrieren, bleiben alle Daten im Speicher erhalten.
createOrReplaceTempView
erstellt (oder ersetzt, wenn der Ansichtsname bereits vorhanden ist) eine faul bewertete "Ansicht", die Sie dann wie eine Hive-Tabelle in Spark SQL verwenden können. Not bleibt im Speicher erhalten, es sei denn, Sie speichern das Dataset, das der Ansicht zugrunde liegt.
scala> val s = Seq(1,2,3).toDF("num")
s: org.Apache.spark.sql.DataFrame = [num: int]
scala> s.createOrReplaceTempView("nums")
scala> spark.table("nums")
res22: org.Apache.spark.sql.DataFrame = [num: int]
scala> spark.table("nums").cache
res23: org.Apache.spark.sql.Dataset[org.Apache.spark.sql.Row] = [num: int]
scala> spark.table("nums").count
res24: Long = 3
Die Daten werden erst nach dem Aufruf .count
vollständig zwischengespeichert. Hier ist der Beweis, dass es zwischengespeichert wurde:
Verwandte SO: spark createOrReplaceTempView vs createGlobalTempView
Relevantes Zitat (im Vergleich zur persistenten Tabelle): "Im Gegensatz zum Befehl createOrReplaceTempView wird saveAsTable den Inhalt des DataFrame verwirklichen und einen Zeiger auf die Daten im Hive-Metastore erstellen." aus https://spark.Apache.org/docs/latest/sql-programming-guide.html#saving-to-persistent-tables
Hinweis: createOrReplaceTempView
war früher registerTempTable
CreateOrReplaceTempView erstellt eine temporäre Ansicht der Tabelle im Arbeitsspeicher, die derzeit nicht vorherrschend ist. Sie können jedoch zusätzlich SQL-Abfrage ausführen. Wenn Sie es speichern möchten, können Sie entweder speichern oder saveAsTable zum Speichern verwenden.
zuerst lesen wir Daten im CSV-Format und konvertieren sie in Datenrahmen und erstellen eine temporäre Ansicht
Daten im CSV-Format lesen
val data = spark.read.format("csv").option("header","true").option("inferSchema","true").load("FileStore/tables/pzufk5ib1500654887654/campaign.csv")
drucken des Schemas
data.printSchema
data.createOrReplaceTempView("Data")
Jetzt können wir SQL-Abfragen auf der gerade erstellten Tabellenansicht ausführen
%sql select Week as Date,Campaign Type,Engagements,Country from Data order by Date asc
SparkSQl unterstützt das Schreiben von Programmen unter Verwendung der Dataset- und Dataframe-API sowie die Unterstützung von SQL.
Um Sql für DataFrames zu unterstützen, ist zunächst eine Tabellendefinition mit Spaltennamen erforderlich. Wenn der Hive-Metastore Tabellen erstellt, erhält er viele unnötige Tabellen, da sich Spark-Sql nativ auf Hive befindet. Es wird also eine temporäre Ansicht erstellt, die vorübergehend in Hive verfügbar ist und für jede andere Hive-Tabelle verwendet wird, sobald der Spark-Kontext angehalten wird.
Um die Ansicht zu erstellen, benötigen Entwickler ein Dienstprogramm namenscreateOrReplaceTempView