Spark 中的缓存是如何工作的

问题描述

我正在努力掌握 Spark 中缓存的用例。我将这个概念理解为“它仅将 RDD 保存到内存中”,但在执行操作后这不是已经完成了吗?

假设我读取了一个文本文件并将 RDD 命名为“df”,然后运行 ​​count() 作为我的操作。通过这样做,我已经在内存中拥有了我的 RDD 并且可以在以后调用,那么为什么或何时需要缓存我的 RDD?是否在使用过滤器的情况下(但过滤器返回一个可以存储为新变量的新 RDD)?

谢谢你的帮助:)

解决方法

当你调用一个动作时,RDD确实进入了内存,但在该动作完成后该内存将被释放。通过缓存 RDD,它将被强制持久化到内存(或磁盘,取决于你如何缓存它),这样它就不会被擦除,并且可以被重用以加快未来对同一 RDD 的查询。

过滤器是不同的,因为过滤器是一个转换,而不是一个动作。当然你也可以缓存一个过滤后的 RDD,但它只会在过滤后的 RDD 上调用一个 action 后才会持久化到内存中。