2016-12-22 5 views
0

Während der Verwendung von Funken RDD, weiß ich, dass eine neue Bühne jedes Mal erstellt wird, wenn wir eine ShuffleRDD haben, aber ist eine neue Stufe erstellt, wenn wir mehrere Aktionen haben?Spark DAG Anzahl der Stufen

Beispiel:

val rdd1 = sc.textFile("<some_path").keyBy(x=>x.split(",")(1)) 

val rdd2 = sc.textFile("<some_path").keyBy(x=>x.split(",")(1)) 

val rdd3 = rdd1.join(rdd2) 

rdd3.filter(x=><somecondition1>).saveAsTextFile("location1") 
rdd3.filter(x=><somecondition2>).saveAsTextFile("location2") 

Jetzt Stage1 Aufgaben RDD1, RDD2 und RDD3 bezogen haben, dann werden Stage2 haben sowohl die Aktionen speichern?

Antwort

0

Ich fragte tatsächlich eine ähnliche Frage vor ein paar Monaten here.

In Ihrem Fall ruft rdd3 eine Umwandlung auf. Also werden die Aktionen beim Erstellen von rdd1 und rdd2 passieren, wenn Sie rdd3 deklarieren. Nachfolgende Transformationen passieren bei jedem Speichern (speziell Filtern), aber rdd1 und rdd2 werden nicht erneut als Aktionen ausgeführt.

Sie hätten einen ähnlichen Effekt, wenn Sie die Daten vor dem Ausführen der Speicherungen zwischenspeichern.

Ich weiß nicht, welche Version von Spark Sie verwenden, aber Sie finden relevante Informationen in der Dokumentation here. Es ist das gleiche für mindestens 1,6+.

0

Stage2 hat nur eine Speicheroperation.

In Ihnen Code saveAsTextFile ist eine Aktion, die Funke aufrufen wird, um Ihre RDD-Linie zu berechnen. Mit anderen Worten, Spark führt diesen Code nur aus, bis er saveAsTextFile gefunden hat. Dann werden Stufen und Aufgaben erstellt und den Vollstreckern übergeben.

Da Ihr Code zwei saveAsTextFile s hat und Sie keine zwischengeschalteten rdds zwischengespeichert haben, wird rdd1, rdd2, rdd3 in diesem Fall doppelt berechnet.

Stage ist ein Konzept innerhalb von Job, eine Aktion ruft einen Job auf, daher gibt es keine Möglichkeit, in welcher Phase zwei Aktionen enthalten sind.