2016-05-12 22 views
2

在spark中,我想知道下一個RDD實現時以前的RDD會發生什麼。當下一個RDD實現時,以前的RDD會發生什麼?

讓說我有下面的Scala代碼

val lines = sc.textFile("/user/cloudera/data.txt") 
val lineLengths = lines.map(s => s.length) 
val totalLength = lineLengths.reduce((a, b) => a + b) 

我linesRDD是基本RDD 和同樣地,我有linesLengths RDD

我知道這兩個RDD被物化時減少操作調用。

我的問題是,雖然數據流經這2個RDD,但當linesLengthRDRD變爲物化時,linesRDD會發生什麼情況。

一旦linesLengthsRDD得到物化,那麼linesRDD裏面的數據會被刪除嗎?

假設在生產點火作業可能有100個RDD,單個動作被稱爲第100個RDD。

當第99個RDD實現時,第1個RDD中的數據會發生什麼變化?

所有RDD中的數據都被刪除,只有各自的最終Action返回相應的輸出?

或者在每個RDD

數據被自動解除一旦RDD它的數據傳遞到其下一個RDD按DAG?

回答

0

實際上,line和lineLength都會在reduce之後保存它們的rdds。正如你所提到的,你可以將rdd想象爲轉換的DAG。所以如果以後你想在線或線上執行一些其他的轉換,你可以。儘管它們在reduce期間實現,但除非直接緩存,否則當另一個操作將在其所屬的DAG上調用時,它們將再次運行其轉換。

+0

我沒有在任何RDD上應用任何緩存操作。那麼line和lineLength都會在reduce之後保存它們的rdd DATA?我的問題是關於數據在RDD的 –

+0

所有關於他們將保持不變,因爲他們在減少之前。他們實際上並不持有這些數據。僅當提交操作並將其分配給某個變量時纔會檢索數據。 –

+0

是的。當你調用一個Action時,spark會從源位置讀取數據並通過所有轉換。這意味着每個轉換的每個RDD都得到了實現。我的問題是,每個RDD是否保留數據,直到動作返回一些輸出爲止或每個RDD刪除保留的數據,只要它發送數據到下一個RDD? –

相關問題