So definieren Sie eine Globale Lesen\schreiben von Variablen in Spark

Funke hat broadcast Variablen, die nur gelesen werden, und accumulator Variablen, die updates von den Knoten, aber nicht Lesen. Ist es Weg oder einen workaround - eine variable definieren, die sowohl aktualisiert und gelesen werden können?

Eine Voraussetzung für das Lesen\schreiben von globalen Variablen wäre die Umsetzung in einem cache. Als Dateien werden geladen und verarbeitet, wie der rdd ist, Berechnungen durchgeführt werden. Die Ergebnisse dieser Berechnungen geschieht in mehreren Knoten parallel laufen - müssen gestellt werden, in eine Karte, die hat, wie es ist Schlüssel, dass einige Attribute in der Entität verarbeitet werden. Wie die nachfolgenden Elemente innerhalb der rdd ist, verarbeitet werden, wird der cache abgefragt.

Scala hat ScalaCache, die eine Fassade für die cache-Implementierungen, wie Google Guava. Aber wie würde so ein cache enthalten sein und der Zugriff innerhalb einer Spark-Applikation?

Den cache kann definiert werden als eine variable in der Treiber-Anwendung, die erstellt die SparkContext. Aber dann würde es zwei Probleme:

  • Leistung würde vermutlich schlecht werden, weil der Netzwerk-overhead
    zwischen den Knoten und der Treiber-Anwendung.
  • Nach meinem Verständnis, die jeden rdd weitergegeben werden, eine Kopie der variable
    (cache in diesem Fall), wenn die variable des ersten Zugriffs durch die
    Funktion übergeben, rdd. Jeder rdd wäre es eine Kopie, nicht den Zugang zu einer gemeinsamen globalen Variablen .

Was ist der beste Weg, zu implementieren und zu speichern, solch einen cache?

Dank

  • So definieren Sie eine Globale Lesen\schreiben von Variablen in Spark, z.B. für die Definition der cache, wie in meinem Beispiel.
  • Dank Tzach - hinzufügen von neuen Kommentaren auf diese Frage
InformationsquelleAutor user1052610 | 2016-04-04
Schreibe einen Kommentar