簡體   English   中英

Spark DAG階段數

[英]Spark DAG Number of Stages

在使用spark RDD時,我知道每次我們有ShuffleRDD都會創建一個新舞台,但是當我們有多個動作時會創建一個新舞台嗎?

例:

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")

現在Stage1將具有與rdd1,rdd2和rdd3相關的任務,那么Stage2將同時具有保存操作?

實際上,幾個月前我在這里問過類似的問題。

在您的情況下,rdd3調用轉換。 因此,在聲明rdd3時將發生創建rdd1和rdd2的操作。 隨后的轉換在每次保存時發生(特別是過濾),但rdd1和rdd2不會作為動作再次運行。

如果在運行保存之前緩存了數據,將會產生類似的效果。

我不知道您使用的是哪個版本的Spark,但是您可以從此處的文檔中找到相關信息。 至少1.6+相同。

Stage2只有一個保存操作。

在您的代碼中, saveAsTextFile是一個動作,它將調用spark來計算您的rdd世系。 換句話說,spark只會執行此代碼,直到找到saveAsTextFile 然后將創建階段和任務並將其提交給執行者。

由於您的代碼具有兩個saveAsTextFile並且您從未緩存任何中間的rdds,因此在這種情況下rdd1,rdd2和rdd3將被計算兩次。

階段是Job中的一個概念,一個動作可以調用一個作業,因此,階段中不可能包含兩個動作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM