Ich lerne Funken mit dem Buch "Learning Spark". Kam über diesen Begriff (Seite 54)
We can disable map-side aggregation in combineByKey() if we know that our data won’t benefit from it
Ich bin verwirrt, was hier mit map-side aggregation gemeint ist. Das einzige, was mir in den Sinn kommt, ist Mapper & amp; Reducer in Hadoop MapReduce ... aber glaube, dass in keiner Weise mit Spark verbunden ist.
Die Idee hinter Map-Side-Aggregationen ist die gleiche wie bei Hadoop-Combinern. Wenn ein einzelner Mapper mehrere Werte für denselben Schlüssel liefern kann, können Sie das Mischen reduzieren, indem Sie die Werte lokal reduzieren.
Ein Beispiel für eine Operation, die von einer kartenseitigen Aggregation profitieren kann, ist das Erstellen eines Wertesatzes für jeden Schlüssel, besonders wenn Sie eine RDD vor dem Kombinieren partitionieren:
Zuerst erstellen wir Dummy-Daten:
%Vor% Jetzt können wir partitionieren mit HashPartitioner
:
Und schließlich kombinieren:
%Vor% Da pairs
RDD partitioniert wurde, sollten Werte für jeden Schlüssel lokal auf einem einzelnen Worker-Knoten erstellt werden, was den Netzwerkverkehr erheblich reduziert.
Sie können z. B. keine kartenseitige Aggregation (Combiner) verwenden, wenn Sie Werte nach Schlüssel gruppieren (die groupByKey-Operation verwendet keinen Combiner). Der Grund dafür ist, dass alle Werte für jeden Schlüssel vorhanden sein sollten, nachdem die groupByKey-Operation abgeschlossen ist. Somit ist eine lokale Reduktion der Werte (Combiner) nicht möglich.
Sie haben Recht, der Begriff Map-Side-Reduction kommt aus dem Map / Reduce-Land und die Idee ist etwas kompliziert in der Apache Spark-Seite der Dinge. Wenn es möglich ist, mehrere Elemente innerhalb einer Partition zu kombinieren, bevor die Elemente gemischt werden (und die kombinierten Elemente weniger Platz beanspruchen), ist es sinnvoll, vor dem Mischen der Daten eine Partitionsreduzierung durchzuführen.
Ein Fall, in dem die karteseitige Reduktion deaktiviert ist in Spark ist mit groupByKey
, auch wenn wir einige Elemente in derselben Partition kombinieren können, benötigen sie ungefähr die gleiche Menge an Speicherplatz Jedenfalls gibt es keine entsprechende Reduzierung der Netzwerk- / Serialisierungsarbeit.
Ich hoffe, das hilft und freut mich, dass Sie Learning Spark lesen:)
Tags und Links apache-spark