Ich versuche zu verstehen, wie Apache Spark hinter den Kulissen arbeitet. Nach der Codierung ein wenig in Spark bin ich ziemlich sicher, dass es implementiert als RMI Remote-Objekte, nicht wahr?Apache Spark und Remote Method Invocation
Auf diese Weise kann es sie innerhalb der Transformation ändern, wie map
s, flatMap
s, und so weiter. Objekte, die nicht Teil einer sind, werden einfach serialisiert und während der Ausführung an einen Arbeiter gesendet.
Im Beispiel unten, lines
und tokens
als entfernte Objekte, behandelt werden, während die Saite toFind
einfach serialisiert und an die Arbeiter kopiert werden.
val lines: RDD[String] = sc.textFile("large_file.txt")
val toFind = "Some cool string"
val tokens =
lines.flatMap(_ split " ")
.filter(_.contains(toFind))
Bin ich falsch? Ich habe ein wenig gegoogelt, aber ich habe keinen Hinweis darauf gefunden, wie Spark intern implementiert ist.
Sie können den Quellcode [Scala RDD] (https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/RDD.scala) überprüfen . –
@ AlbertoBonsanto, du hast Recht. Aber die 'RDD.scala' Datei hat mehr als 1800 Sloc :) –