Ich habe ein kleines Scala-Programm, das auf einem einzelnen Knoten läuft. Allerdings skaliere ich es so, dass es auf mehreren Knoten ausgeführt wird. Dies ist mein erster solcher Versuch. Ich versuche nur zu verstehen, wie die RDDs in Spark arbeiten, also basiert diese Frage auf Theorie und ist möglicherweise nicht 100% korrekt.Spark RDDs - wie funktionieren sie?
Sagen wir, ich schaffen eine RDD: val rdd = sc.textFile(file)
Jetzt, nachdem ich getan habe, dass, bedeutet das, dass die Datei auf file
nun über den Knoten unterteilt ist (vorausgesetzt, alle Knoten Zugriff auf den Dateipfad) ?
Zweitens mag ich die Anzahl der Objekte in der RDD (einfach genug), aber zählen, ich brauche diese Zahl in einer Berechnung zu verwenden, die auf Objekte in der RDD angewandt werden muss - ein Pseudo-Code Beispiel:
rdd.map(x => x/rdd.size)
sagen lassen gibt es 100 Objekte in rdd
, und sagen, dass es 10 Knoten, also eine Anzahl von 10 Objekten pro Knoten (vorausgesetzt, dies ist, wie die RDD Konzept funktioniert), wenn ich jetzt die Methode aufrufen, ist jeder Knoten gehen die Berechnung mit rdd.size
als 10
oder 100
durchführen? Da die RDD insgesamt die Größe 100
hat, aber lokal auf jedem Knoten nur 10
ist. Muss ich vor der Berechnung eine Broadcast-Variable erstellen? Diese Frage hängt mit der folgenden Frage zusammen.
Schließlich, wenn ich eine Umwandlung in die RDD, z. rdd.map(_.split("-"))
, und dann wollte ich die neue size
der RDD, muss ich eine Aktion auf der RDD, wie count()
ausführen, so dass alle Informationen an den Treiberknoten zurückgeschickt werden?
'Diese Frage bezieht sich auf die folgende Frage.' -> ?? – gsamaras
Ich denke du meintest 'rdd.flatMap (_. Split (" - "))' – lovasoa