【问题标题】:Spark cache is not working properlySpark 缓存无法正常工作
【发布时间】:2016-03-11 09:09:26
【问题描述】:

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

【问题讨论】:

  • 我建议您添加标签 spark 以更快地获得帮助
  • 您的代码甚至无法编译 - 看起来您为示例过度简化了它...应该将 myFuntion().cache() 更改为 rdd.map(a => { myFunction(); a }).cache()??

标签: scala caching apache-spark rdd


【解决方案1】:

我不确定您在代码示例中如何在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()

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2019-09-01
    • 2013-03-04
    • 1970-01-01
    相关资源
    最近更新 更多