Spark + Scala-Transformationen, Unveränderlichkeit und Overheads beim Speicherverbrauch

Ich habe in Youtube einige Videos zu @ durchgeseheFunk die Architektur

uch wenn eine langsame Auswertung, die Ausfallsicherheit der Datenerstellung im Fehlerfall und gute funktionale Programmierkonzepte den Erfolg verteilter Resilenace-Datensätze ausmachen, ist der Speicheraufwand aufgrund mehrerer Fehler ein beunruhigender Fakto Transformationen was zu Speicher-Overheads aufgrund von Unveränderlichkeit der Daten führt.

Wenn ich das Konzept richtig verstehe, werden durch jede Transformation neue Datensätze erstellt, und daher wird der Speicherbedarf um ein Vielfaches steigen. Wenn ich 10 Transformationen in meinem Code verwende, werden 10 Datensätze erstellt und mein Speicherverbrauch wird um das Zehnfache erhöht.

z.B

val textFile = sc.textFile("hdfs://...")
val counts = textFile.flatMap(line => line.split(" "))
                 .map(word => (word, 1))
                 .reduceByKey(_ + _)
counts.saveAsTextFile("hdfs://...")

as obige Beispiel enthält drei Transformationen:flatMap, map and reduceByKey. Bedeutet das, dass ich 3-fachen Datenspeicher für die Datengröße X benötige?

Ist mein Verständnis korrekt? Ist das Zwischenspeichern von RDD nur eine Lösung für dieses Problem?

Nachdem ich mit dem Caching beginne, kann es aufgrund der Größe zu einem Überlauf auf den Datenträger kommen, und die Leistung würde aufgrund von Datenträger-E / A-Vorgängen beeinträchtigt. In diesem Fall sind die Leistungen von Hadoop und Spark vergleichba

BEARBEITEN

Aus den Antworten und Kommentaren habe ich den verzögerten Initialisierungs- und Pipeline-Prozess verstanden. Meine Annahme von 3-fachem Speicher, bei dem X die ursprüngliche RDD-Größe ist, ist nicht korrekt.

Aber ist es möglich, 1 X RDD im Speicher zwischenzuspeichern und über die Pipeline zu aktualisieren? Wie funktioniert cache ()?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage