Scala Spark缓存工作不正常
我尝试使用cache()将数据保留在内存中。 我设置了一些属性以确保有足够的内存来保存rddA和rddB。 但不知何故,rddA并没有在应该生成的时候生成,myFunction运行了2次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
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()
??