2017-09-11 74 views
0

我正在驅動程序上運行Spark應用程序。火花任務執行系列

是很簡單的跟隨

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

我的問題是,如果第三行計算幀計數後總是執行。在執行數據幀及其計數之前,驅動程序是否有可能首先運行println命令?

+1

如何在不對數據幀執行計數操作的情況下打印計數? –

+0

計數最初被聲明爲零。 – Luckylukee

+0

我看到了。然而,對我來說打印只是零沒有任何意義。如果你在'count = test.count()'這行之前加上println語句怎麼辦? –

回答

1

不,驅動程序不可能在上述代碼中的test.count()之前執行println,因爲count是一個拉伸操作,調用終端操作會強制spark繼續執行計算。

如果你想異步算那麼這裏是一個代碼段,其工作原理:

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

注意countAsync行動是不能直接在數據幀。它可以在RDD上執行。

+0

我覺得不是,「test.count」會是一個異步操作! – Luckylukee

+0

count是默認的同步動作。有幾個由spark支持的異步操作。如果你想要asyc行爲,那麼你需要在你的code.check這個類中明確提到:http://spark.apache.org/docs/2.2.0/api/java/index.html?org/apache/spark/ rdd/AsyncRDDActions.html –

+0

@Luckylukee上面的解釋清除了你的疑問?此外,我已經用異步計數的代碼片段更新了答案。 –