2017-09-11 1 views
0

Ich bin eine Spark-Anwendung auf dem Treiber ausgeführt.Spark Aufgabenausführung Serie

einfach ist wie

val count=0; 
val test_dataframe =//extrenal frame 
count=test.count(); 
println("The count of frame is " + count); 

Meine Frage also folgen, wenn die dritte Zeile wird nach der Berechnung der Anzahl der Rahmen immer ausgeführt. Ist es möglich, dass der Treiber zuerst den Befehl println ausführt, bevor er den Datenrahmen und seine Zählung ausführt?

+1

Wie wird die Zählung gedruckt, ohne die Zählung auf dem Datenrahmen auszuführen? –

+0

Die Zählung wird anfänglich als Null deklariert. – Luckylukee

+0

Ich sah das. Für mich ergab das aber keinen Sinn, nur Null zu drucken. Was, wenn Sie diese println Anweisung vor 'count = test.count()' diese Zeile setzen? –

Antwort

1

Nein, es ist nicht möglich, dass der Treiber println vor test.count() im oben genannten Code ausführt, da es sich um einen Rissmineralbetrieb handelt und der Aufruf an eine Terminaloperation einen Funken auslöst, um die Berechnung durchzuführen.

Wenn Sie async dann hier zählen wollen, ist ein Code-Snippet, das funktioniert:

var future = test.rdd.countAsync 
println("The count before future evaluation: " + count) 
count = future.get 
println("The count after future evaluation: " + count) 

Beachten Sie, dass countAsync Aktion direkt auf Datenrahmen nicht zur Verfügung steht. Es kann auf RDD durchgeführt werden.

+0

Ich fühle nicht, "test.count" wäre eine asynchrone Operation in der Natur! – Luckylukee

+0

count ist standardmäßig eine synchrone Aktion. Es gibt mehrere asynchrone Aktionen, die von Spark unterstützt werden. Wenn Sie asyc Verhalten wollen, dann müssen Sie dies explizit in Ihrem Code erwähnen.check diese Klasse: http://spark.apache.org/docs/2.2.0/api/java/index.html?org/apache/spark/ rdd/AsyncRDDActions.html –

+0

@Luckylukee macht obige Erklärung löscht Ihre Zweifel? Außerdem habe ich die Antwort mit einem Code-Snippet für asynchrone Zählung aktualisiert. –