2016-03-11 92 views
-1

我試圖使用緩存()來保存我的數據在內存中。 我設置了一些屬性來確保足夠的內存來保持rddA和rddB。 但不知何故rddA並不是當它應該作出,而myFunction工作兩次。火花緩存工作不正常

def myFunction = println(".") // to check when It works 

var rddA = myFuntion().cache() 
var rddB = rddA.map({ do somethings}).cache() // I though rddA made in cache here 

rddB.map({ real work }) // printed "." 
... 
... 
rddA.map({ other works}) // printed "." again why?? 
+0

我建議你添加標籤spark來獲得更快的幫助 –

+0

你的代碼甚至沒有編譯 - 看起來像你簡化它的例子...應該'myFuntion()。cache()'改爲'rdd .map(a => {myFunction(); a})。cache()'? –

回答

1

我不知道你是如何在myFunction您的代碼示例有呼籲cache(),你似乎並不被物化RDD,所以我不是很清楚什麼錯誤你。下面是一個簡單的例子來說明緩存()在本地環境中工作:

val conf = new SparkConf().setAppName("my-spark-test").setMaster("local") 
val sc = new SparkContext(conf) 
val rddA = sc.wholeTextFiles("*.txt").map(_._2) 

val rddB = rddA.map(x => { 
    println("*** RUNNING ***") 
    x 
}).cache() 

val xs = rddB.collect() 
val ys = rddB.collect() 

這將打印*** RUNNING ***到控制檯只有一次,但如果你從RDDB定義的結尾處,刪除緩存()調用它會打印*** RUNNING ***兩次。