Erweiterte Spark-Programmierung

Spark enthält zwei verschiedene Arten von gemeinsam genutzten Variablen - eine davon broadcast variables und zweitens ist accumulators.

  • Broadcast variables - verwendet, um große Werte effizient zu verteilen.

  • Accumulators - wird verwendet, um die Informationen einer bestimmten Sammlung zusammenzufassen.

Broadcast-Variablen

Mit Broadcast-Variablen kann der Programmierer eine schreibgeschützte Variable auf jedem Computer zwischenspeichern, anstatt eine Kopie davon mit Aufgaben zu versenden. Sie können beispielsweise verwendet werden, um jedem Knoten auf effiziente Weise eine Kopie eines großen Eingabedatensatzes zu geben. Spark versucht auch, Broadcast-Variablen mithilfe effizienter Broadcast-Algorithmen zu verteilen, um die Kommunikationskosten zu senken.

Funkenaktionen werden durch eine Reihe von Stufen ausgeführt, die durch verteilte "Shuffle" -Operationen getrennt sind. Spark sendet automatisch die allgemeinen Daten, die für Aufgaben in jeder Phase benötigt werden.

Die auf diese Weise übertragenen Daten werden in serialisierter Form zwischengespeichert und vor dem Ausführen jeder Aufgabe deserialisiert. Dies bedeutet, dass das explizite Erstellen von Broadcast-Variablen nur dann nützlich ist, wenn Aufgaben in mehreren Phasen dieselben Daten benötigen oder wenn das Zwischenspeichern der Daten in deserialisierter Form wichtig ist.

Broadcast-Variablen werden aus einer Variablen erstellt v telefonisch SparkContext.broadcast(v). Die Broadcast-Variable ist ein Wrappervund auf seinen Wert kann durch Aufrufen von zugegriffen werden valueMethode. Der unten angegebene Code zeigt dies -

scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))

Output - -

broadcastVar: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)

Nachdem die Broadcast-Variable erstellt wurde, sollte sie anstelle des Werts verwendet werden v in allen Funktionen laufen auf dem Cluster, so dass vwird nicht mehr als einmal an die Knoten gesendet. Außerdem das Objektv sollte nach dem Broadcast nicht geändert werden, um sicherzustellen, dass alle Knoten den gleichen Wert der Broadcast-Variablen erhalten.

Akkus

Akkumulatoren sind Variablen, die nur durch eine assoziative Operation „hinzugefügt“ werden und daher parallel parallel unterstützt werden können. Sie können verwendet werden, um Zähler (wie in MapReduce) oder Summen zu implementieren. Spark unterstützt nativ Akkumulatoren numerischer Typen, und Programmierer können Unterstützung für neue Typen hinzufügen. Wenn Akkumulatoren mit einem Namen erstellt werden, werden sie in angezeigtSpark’s UI. Dies kann hilfreich sein, um den Fortschritt der laufenden Phasen zu verstehen (HINWEIS - dies wird in Python noch nicht unterstützt).

Aus einem Anfangswert wird ein Akkumulator erstellt v telefonisch SparkContext.accumulator(v). Auf dem Cluster ausgeführte Aufgaben können dann mithilfe von hinzugefügt werdenaddMethode oder der Operator + = (in Scala und Python). Sie können den Wert jedoch nicht lesen. Nur das Treiberprogramm kann den Wert des Akkumulators mit seinem lesenvalue Methode.

Der unten angegebene Code zeigt einen Akkumulator, mit dem die Elemente eines Arrays addiert werden.

scala> val accum = sc.accumulator(0) 
 
scala> sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x)

Wenn Sie die Ausgabe des obigen Codes sehen möchten, verwenden Sie den folgenden Befehl:

scala> accum.value

Ausgabe

res2: Int = 10

Numerische RDD-Operationen

Mit Spark können Sie mithilfe einer der vordefinierten API-Methoden verschiedene Operationen an numerischen Daten ausführen. Die numerischen Operationen von Spark werden mit einem Streaming-Algorithmus implementiert, mit dem das Modell elementweise erstellt werden kann.

Diese Operationen werden berechnet und als a zurückgegeben StatusCounter Objekt durch Aufrufen status() Methode.

Das Folgende ist eine Liste der numerischen Methoden, die in verfügbar sind StatusCounter.

S.No. Methoden & Bedeutung
1

count()

Anzahl der Elemente in der RDD.

2

Mean()

Durchschnitt der Elemente in der RDD.

3

Sum()

Gesamtwert der Elemente in der RDD.

4

Max()

Maximalwert unter allen Elementen in der RDD.

5

Min()

Mindestwert unter allen Elementen in der RDD.

6

Variance()

Varianz der Elemente.

7

Stdev()

Standardabweichung.

Wenn Sie nur eine dieser Methoden verwenden möchten, können Sie die entsprechende Methode direkt auf RDD aufrufen.