Gibt es eine Möglichkeit, ein Cache-SQL-Abfrageergebnis zwischenzuspeichern, ohne rdd.cache () zu verwenden? für Beispiele:
%Vor%Wir können output.cache () verwenden, um das Ergebnis zwischenzuspeichern, aber dann können wir die sql-Abfrage nicht verwenden, um damit umzugehen.
Also ich möchte fragen, gibt es etwas wie sqlcontext.cacheTable (), um das Ergebnis zwischenzuspeichern?
Sie sollten sqlContext.cacheTable("table_name")
verwenden, um es zwischenzuspeichern, oder alternativ CACHE TABLE table_name
SQL-Abfrage verwenden.
Hier ist ein Beispiel. Ich habe diese Datei auf HDFS:
%Vor%Dann der Code in PySpark:
%Vor%Jetzt haben wir eine Tabelle und können sie abfragen:
%Vor%Um es zu erhalten, haben wir 3 Optionen:
%Vor%1. und 2. Optionen werden bevorzugt, da sie die Daten im optimierten speicherinternen Spaltenformat zwischenspeichern würden, während 3. sie wie jede andere RDD in zeilenorientierter Weise zwischenspeichern würde.
Also zurück zu Ihrer Frage, hier ist eine mögliche Lösung:
%Vor%Das Folgende ist am ähnlichsten mit .cache für RDDs und hilfreich in Zeppelin oder ähnlichen SQL-heavy-Umgebungen
%Vor% Dann erhalten Sie zwischengespeicherte Lesevorgänge sowohl für nachfolgende Verwendungen von interesting_query
als auch für alle Abfragen von CACHED_TABLE
.
Diese Antwort basiert auf der angenommenen Antwort, aber die Verwendung von AS
macht den Aufruf in den eingeschränkteren SQL-Umgebungen, in denen Sie nicht .collect()
oder RDD / Dataframe-Operationen ausführen können, wirklich nützlich in keiner Weise.
Tags und Links caching apache-spark query-optimization