2017-05-04 68 views
0

我想知道,當執行在緩存是一個過濾RDD猶若我們進行以下說明:上緩存RDD

val rdd : = sc.textFile("myfile").zipwithIndex.cache 
val size = rdd.count 
val filter = rdd.filter(_._2 % 2 == 0) 
val sizeF = filter.count 

在過濾器上執行的操作RDD是執行,如果它是在高速緩存或不是?儘管我們從第一個RDD創建了第二個RDD,但信息來自同一個地方,所以我想知道它是否被複制到需要緩存的新對象中,或者如果過濾對象直接鏈接到了其父項允許更快的行動?

回答

2

由於filter轉型而不是動作,由於火花實際上什麼也沒有在下面這行:

val filter = rdd.filter(_._2 % 2 == 0) 

以下行:

val sizeF = filter.count 

將使用緩存的()rdd,並將執行filter變換然後count動作

因此,filter轉換中沒有任何內容cache

Spark Guide

轉換

下表列出了一些火花支持 常見的轉換。有關詳細信息,請參閱RDD API文檔(Scala,Java,Python,R)和RDB函數doc(Scala,Java)。

filter(func)返回通過選擇func返回true的源的那些元素 形成的新數據集。

注意。如果filter是動作,並且創建了新的RDD,則不會是cached,只有cache()操作在其上執行的RDD是cached

0

沒有,

孩子RDD不會cahced,緩存將保持原始RDD在你的工人和其他數據都不會被緩存。

如果您要求這個過濾後的RDD其他步驟不會更改數據,由於Spark將工作中的Spark文件保留在工作人員中,直到發生真正的變化時,響應總是會很快。