2015-04-22 9 views
7

Ich würde gerne wissen, wie collectAsMap in Spark funktioniert. Genauer möchte ich wissen, wo die Aggregation der Daten aller Partitionen stattfinden wird? Die Aggregation findet entweder in Master oder in Workers statt. Im ersten Fall sendet jeder Worker seine Daten an den Master und wenn der Master die Daten von jedem einzelnen Worker sammelt, aggregiert der Master die Ergebnisse. Im zweiten Fall sind die Arbeiter dafür verantwortlich, die Ergebnisse zu aggregieren (nachdem sie die Daten untereinander ausgetauscht haben) und danach werden die Ergebnisse an den Master gesendet.Spark CollectAsMap

Es ist wichtig für mich, einen Weg zu finden, so dass der Master die Daten von jeder Partition separat sammeln kann, ohne dass die Mitarbeiter Daten austauschen.

+0

In Ihrer Terminologie ich glaube, Sie Treiber und nicht Meister zu sagen, bedeuten. Im Treiber werden die Erfassungsergebnisse aggregiert und vom Spark-Cluster gesendet. – Rich

Antwort

6

Sie können hier sehen, wie sie collectAsMap tun. Da der RDD-Typ ein Tupel ist, sieht es so aus, als ob er nur das normale RDD-Sammeln verwendet und dann die Tupel in eine Karte von Schlüssel-, Wert-Paaren übersetzt. Aber sie erwähnen in dem Kommentar, dass Multi-Map nicht unterstützt wird, also benötigen Sie ein 1: 1-Schlüssel/Wert-Mapping für Ihre Daten.

collectAsMap function

Was sammeln tut, ist eine Funkenjob auszuführen und die Ergebnisse aus jeder Partition von den Arbeitern zurück und aggregiert sie mit einer Verringerung/concat Phase auf den Fahrer.

collect function

Also da, sollte es der Fall sein, dass der Fahrer die Daten jeder Partition ohne Arbeiter Austausch von Daten getrennt sammelt collectAsMap auszuführen.

Hinweis: Wenn Sie Transformationen auf Ihrer RDD vor der Verwendung von collectAsMap durchführen, die zu einem Shuffle führen, kann ein Zwischenschritt auftreten, der dazu führt, dass die Worker untereinander Daten austauschen. Überprüfen Sie die Anwendungsoberfläche Ihres Cluster-Masters, um mehr Informationen darüber zu erhalten, wie Spark Ihre Anwendung ausführt.

1

Zunächst einmal in beiden Operationen, alle Ihre Daten, die in RDD vorhanden ist, wird von verschiedenen Ausführenden/Arbeiter zu Master/Treiber reisen. Sowohl collect als auch collectAsMap werden nur die Daten von verschiedenen Ausführenden/Arbeitern zusammentragen. Deshalb wird es immer empfohlen, nicht zu sammeln, solange und solange Sie keine andere Option haben.

Ich muss sagen, das ist die letzte Sammlung, die man aus Sicht der Leistung betrachten muss.

  1. sammeln: die Ergebnisse als Array zurück.
  2. collectAsMap gibt die Ergebnisse für gepaarte RDD als Map-Sammlung zurück. Und da die Map-Sammlung zurückgegeben wird, erhalten Sie nur Paare mit eindeutigen Schlüsseln und Paare mit doppelten Schlüsseln werden entfernt.

Grüße,

Neeraj