Scala Spark缓存工作不正常

Scala Spark缓存工作不正常,scala,caching,apache-spark,rdd,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

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

我不确定您在那里的代码示例中如何调用
myFunction
上的
cache()
,而且您似乎没有实现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()

这会将运行***的
***打印到控制台上一次,但是如果您从rddB定义的末尾删除cache()调用,它会将运行***
***打印两次。

我建议您添加标签spark以快速获得帮助您的代码甚至没有编译-看起来您对示例过于简化了。。。是否应将
myFunction().cache()
更改为
rdd.map(a=>{myFunction();a}).cache()
??