Spark缓存无法正常工作

时间:2016-03-11 09:09:26

标签: scala caching apache-spark rdd

我尝试使用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??

1 个答案:

答案 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 ***两次。