微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

RDD 是保存在内存中还是在一个动作完成后立即刷新出内存?

如何解决RDD 是保存在内存中还是在一个动作完成后立即刷新出内存?

我正在阅读一本书,这本书对我来说陈述了一个矛盾的陈述。引用本书: “认情况下,每次对 Spark 的 RDD 运行操作时都会重新计算它们。” 但在接下来的几行中,它指出: “在第一次计算之后,Spark 会将 RDD 内容存储在内存中,并在以后的操作中重用。”

我的问题是,如果 RDD 存储在内存中,为什么每次对它们调用操作时都要重新计算?

在第一条语句中,它说每次都重新计算 RDD,在第二条语句中它说,RDD 存储在内存中,以便在以后的操作中重用它们。

解决方法

"Spark’s RDDs are by default recomputed each time you run an action on them." 对于您的这个语句,是的,每次对 RDD 运行操作时都会重新计算它们。现在背后的原因是,如果它将所有 RDD 内容存储在内存中,那么您的内存很快就会耗尽。因此,它不能将每个 RDD 都保存在内存中。当您对其执行任何操作时,它会从源数据中读取并对其执行转换,并为您提供操作的输出。

"After computing it the first time,Spark will store the RDD contents in memory and reuse them in future actions." 默认情况下它不会将其存储在内存中,但根据您的用例,您可以使用 df.cache()df.persist() 持久化特定 RDD,然后它将该 RDD 内容存储在内存,当您第二次执行依赖于缓存的 RDD 的 RDD 的任何操作时,它不会从源读取它,但它会从内存中使用它。只有在对 RDD 执行多个操作时才应缓存 RDD,或者存在复杂的转换逻辑,您不希望每次调用操作时 Spark 都执行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。