2017-02-23 1 views
0

die beiden Szenarien Betrachten:Mit RDD Transformation und wandelt es in ein Datensatz vor einer Aktion VS Datensatz und seine API

A) Wenn ich eine RDD und verschiedene RDD Transformationen haben, werden sie aufgefordert, und vor dem Alle Aktionen werden ausgeführt. Ich erstelle ein Dataset daraus.

B) Ich erstelle einen Dataset ganz am Anfang und ruft verschiedene Dataset-Methoden auf.

Frage: Wenn die beiden Szenarien produzieren das gleiche Ergebnis logisch - verwendet man RDD Transformation und wandelt es in ein Datensatz direkt vor einer Aktion vs nur mit Dataset und seine Transformation - beide Szenarien tun durch das geht gleiche Optimierungen?

Antwort

1

Nein, tun sie nicht.

Wenn Sie RDD- und RDD-Transformation für sie ausführen, wird keine Optimierung durchgeführt. Wenn Sie es am Ende in ein Dataset umwandeln, wird dann und nur dann eine Konvertierung in eine Wolfram-basierte Repräsentation durchgeführt (die weniger Arbeitsspeicher benötigt und keine Garbage Collection durchführen muss).

Wenn Sie Dataset von Anfang an verwenden, wird es die Wolfram-basierte Speicherdarstellung von Anfang an verwenden. Dies bedeutet, dass weniger Speicher belegt wird, die Shuffles kleiner und schneller sind und kein GC-Overhead auftreten würde (obwohl die Konvertierung von der internen Repräsentation in die Fallklasse und zurück erfolgen würde, wenn typisierte Operationen verwendet werden). Wenn Sie Datenrahmenoperationen für das Dataset verwenden, können auch Codegenerations- und Katalysatoroptimierungen genutzt werden.

Siehe auch meine Antwort in: Do I have to explicitly use Dataframe's methods to take advantage of Dataset's optimization?

0

Sie nicht. Die RDD-API verwendet keine der Tungsten/Catalyst-Optimierungen und die entsprechende Logik ist nicht relevant.

Verwandte Themen