【问题标题】:How to uncache RDD?如何取消缓存RDD?
【发布时间】:2014-11-14 07:45:00
【问题描述】:

我使用cache() 将数据缓存在内存中,但我意识到要查看没有缓存数据的性能,我需要取消缓存以从内存中删除数据:

rdd.cache();
//doing some computation
...
rdd.uncache()

但我得到了错误提示:

value uncache 不是 org.apache.spark.rdd.RDD[(Int, Array[Float])] 的成员

那我就不知道怎么解缓存了!

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    RDD 可以使用unpersist()取消缓存

    rdd.unpersist()
    

    source

    【讨论】:

    • 另外,你可以将布尔值传递给unpersist,以确定是否阻塞直到所有块都被删除
    【解决方案2】:

    uncache 函数不存在。我认为你正在寻找不持久的。根据 Spark ScalaDoc 将 RDD 标记为非持久,并从内存和磁盘中删除它的所有块。

    【讨论】:

    • 谢谢你是对的。我尝试了 Josh 所说的,它似乎奏效了!
    • 没关系。这是完全相同的答案。 ;)
    • 合并答案并删除一个会非常有用。你怎么看?
    【解决方案3】:

    如果要删除所有缓存的 RDD,请使用这个 ::

    for ((k,v) <- sc.getPersistentRDDs) {
      v.unpersist()
    }
    

    【讨论】:

      【解决方案4】:

      如果您使用.cache() 将源数据缓存在RDD 中 或您已声明内存小。 或者使用默认内存,对我来说大约是 500 MB。 而你一次又一次地运行代码,

      然后出现这个错误。 尝试在代码末尾清除所有RDD,这样每次代码运行时,RDD 都会被创建并从内存中清除。

      请使用:RDD_Name.unpersist()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-09
        相关资源
        最近更新 更多