我正在驅動程序上運行Spark應用程序。火花任務執行系列
是很簡單的跟隨
val count=0;
val test_dataframe =//extrenal frame
count=test.count();
println("The count of frame is " + count);
我的問題是,如果第三行計算幀計數後總是執行。在執行數據幀及其計數之前,驅動程序是否有可能首先運行println
命令?
我正在驅動程序上運行Spark應用程序。火花任務執行系列
是很簡單的跟隨
val count=0;
val test_dataframe =//extrenal frame
count=test.count();
println("The count of frame is " + count);
我的問題是,如果第三行計算幀計數後總是執行。在執行數據幀及其計數之前,驅動程序是否有可能首先運行println
命令?
不,驅動程序不可能在上述代碼中的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上執行。
我覺得不是,「test.count」會是一個異步操作! – Luckylukee
count是默認的同步動作。有幾個由spark支持的異步操作。如果你想要asyc行爲,那麼你需要在你的code.check這個類中明確提到:http://spark.apache.org/docs/2.2.0/api/java/index.html?org/apache/spark/ rdd/AsyncRDDActions.html –
@Luckylukee上面的解釋清除了你的疑問?此外,我已經用異步計數的代碼片段更新了答案。 –
如何在不對數據幀執行計數操作的情況下打印計數? –
計數最初被聲明爲零。 – Luckylukee
我看到了。然而,對我來說打印只是零沒有任何意義。如果你在'count = test.count()'這行之前加上println語句怎麼辦? –