我尝试使用cache()将数据保存在内存中。 我设置了一些属性以确保足够的内存来保持rddA和rddB。 但是某种程度上rddA不应该在它应该制作时和myFunction工作2次。
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 :(得分:1)
我不确定您是如何在代码示例中cache()
上致电myFunction
的,而且您似乎没有实现RDD,所以我是不清楚你出了什么问题。这是一个显示在本地上下文中工作的cache()的简单示例:
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定义的末尾删除cache()调用,它将打印*** RUNNING ***
两次。