DataFrame / Dataset groupBy Verhalten / Optimierung

9

Angenommen, DataFrame df besteht aus den folgenden Spalten:

  

Name, Nachname, Größe, Breite, Länge, Wiegen

Nun möchten wir ein paar Operationen ausführen, zum Beispiel wollen wir ein paar Datenrahmen erstellen, die Daten über Größe und Breite enthalten.

%Vor%

Wie Sie sehen können, werden andere Spalten wie Länge nicht verwendet. Ist Spark intelligent genug, um die redundanten Spalten vor der Shuffling-Phase fallen zu lassen oder werden sie herumgetragen? Wil läuft:

%Vor%

vor der Gruppierung beeinflussen irgendwie die Leistung?

    
Niemand 02.10.2015, 08:08
quelle

1 Antwort

24

Ja, es ist " intelligent genug ". groupBy für DataFrame ist nicht die gleiche Operation wie groupBy für eine einfache RDD. In einem von Ihnen beschriebenen Szenario müssen keine Rohdaten verschoben werden. Lassen Sie uns ein kleines Beispiel erstellen, um dies zu veranschaulichen:

%Vor%

Wie Sie sehen können, ist die erste Phase eine Projektion, bei der nur erforderliche Spalten erhalten bleiben. Die nächsten Daten werden lokal aggregiert und schließlich global übertragen und aggregiert. Sie erhalten eine etwas andere Antwortausgabe, wenn Sie Spark & ​​lt; = 1.4 verwenden, aber die allgemeine Struktur sollte genau gleich sein.

Schließlich eine DAG-Visualisierung, die zeigt, dass obige Beschreibung den eigentlichen Job beschreibt:

Gleichermaßen enthält Dataset.groupByKey , gefolgt von reduceGroups , sowohl map-side ( ObjectHashAggregate mit partial_reduceaggregator ) als auch reduction-side ( ObjectHashAggregate mit reduceaggregator reduzierung):

%Vor%

Allerdings können andere Methoden von KeyValueGroupedDataset ähnlich wie RDD.groupByKey funktionieren. Zum Beispiel verwendet mapGroups (oder flatMapGroups ) keine partielle Aggregation.

%Vor%

    
zero323 02.10.2015, 08:47
quelle