Apache Spark kombinierenByKey erklärt



In diesem Spark Hadoop-Blog erfahren Sie alles, was Sie über Apache Spark combinByKey wissen müssen. Ermitteln Sie die durchschnittliche Punktzahl pro Schüler mithilfe der kombinierten Methode.

Beitrag von Prithviraj Bose

Spark ist ein blitzschnelles Cluster-Computing-Framework, das für schnelle Berechnungen und die Nachfrage von Fachleuten entwickelt wurde ist heute auf dem Markt erheblich.Hier ist eine leistungsstarke API in Spark kombinierenByKey .





API-Skala: org.apache.spark.PairRDDFunctions.combineByKey .

Was ist Pojo in Java?

Python-API: pyspark.RDD.combineByKey .



Die API übernimmt drei Funktionen (as Lambda-Ausdrücke im Python oder anonyme Funktionen im Leiter ), nämlich

  1. Kombiniererfunktion erstellen: x
  2. Wertfunktion zusammenführen: y
  3. Funktion zum Zusammenführen von Kombinierern: z

und das API-Format ist kombinierenByKey (x, y, z) .

Sehen wir uns ein Beispiel (in Scala) an. Die vollständige Scala-Quelle finden Sie Hier .



Unser Ziel ist es, die durchschnittliche Punktzahl pro Schüler zu ermitteln.

Hier ist eine Platzhalterklasse ScoreDetail Speichern des Schülernamens zusammen mit der Punktzahl eines Fachs.

Scoredetail-spark-combinebykey

Einige Testdaten werden generiert und in Schlüsselpaarwerte konvertiert, wobei Schlüssel = Name des Schülers und value = ScoreDetail Beispiel.

Dann erstellen wir ein Pair RDD, wie im folgenden Codefragment gezeigt. Nur zum Experimentieren habe ich einen Hash-Partitionierer der Größe 3 erstellt, sodass die drei Partitionen jeweils 2, 2 und 4 Schlüsselwertpaare enthalten. Dies wird in dem Abschnitt hervorgehoben, in dem wir jede Partition untersuchen.

Jetzt können wir jede Partition untersuchen. In der ersten Zeile wird die Länge jeder Partition (Anzahl der Schlüsselwertpaare pro Partition) und in der zweiten Zeile der Inhalt jeder Partition gedruckt.

veränderbare und unveränderliche Objekte in Java

Und hier ist die Finale-Bewegung, bei der wir die durchschnittliche Punktzahl pro Schüler berechnen, nachdem wir die Punktzahlen über die Partitionen hinweg kombiniert haben.

Der obige Code-Fluss ist wie folgt ...
Zuerst müssen wir eine Kombiniererfunktion erstellen, die im Wesentlichen ein Tupel = (Wert, 1) für jeden Schlüssel ist, der in jeder Partition angetroffen wird. Nach dieser Phase lautet die Ausgabe für jeden (Schlüssel, Wert) in einer Partition (Schlüssel, (Wert, 1)).

Bei der nächsten Iteration werden dann die Kombiniererfunktionen pro Partition unter Verwendung der Zusammenführungswertfunktion für jeden Schlüssel zusammengeführt. Nach dieser Phase ist die Ausgabe von jedem (Schlüssel, (Wert, 1)) (Schlüssel, (Gesamt, Anzahl)) in jeder Partition.

Schließlich führt die Merge Combiner-Funktion alle Werte über die Partitionen in den Executoren hinweg zusammen und sendet die Daten zurück an den Treiber. Nach dieser Phase ist die Ausgabe von jedem (Schlüssel, (Gesamt, Anzahl)) pro Partition
(Schlüssel, (totalAcrossAllPartitions, countAcrossAllPartitions)).

Die Karte konvertiert die
(Schlüssel, Tupel) = (Schlüssel, (totalAcrossAllPartitions, countAcrossAllPartitions))
um den Durchschnitt pro Schlüssel als (Schlüssel, Tupel._1 / Tupel._2) zu berechnen.

In der letzten Zeile werden die Durchschnittswerte aller Schüler am Ende des Fahrers gedruckt.

Hast du eine Frage an uns? Erwähnen Sie sie im Kommentarbereich und wir werden uns bei Ihnen melden.

Zusammenhängende Posts:

Partitionierung in Spark entmystifizieren