Spark SQL: So speichern Sie das Ergebnis der SQL-Abfrage, ohne rdd.cache () zu verwenden

8

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?

    
lwwwzh 19.01.2015, 14:42
quelle

2 Antworten

18

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%     
0x0FFF 19.01.2015, 16:25
quelle
4

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.

    
Rick Moritz 05.04.2017 12:49
quelle