在Spark中,每次我们对RDD执行任何操作时,都会重新计算RDD。因此,如果我们知道RDD将被重用,我们应该明确地缓存RDD。
让我们说,Spark决定懒惰地缓存所有RDD并使用LRU自动将最相关的RDD保存在内存中(这是大多数缓存以任何方式工作的方式)。这对开发人员有很大的帮助,因为他不必考虑缓存并专注于应用程序。此外,我不知道它如何对性能产生负面影响,因为很难跟踪程序内变量(RDD)的使用次数,大多数程序员将决定以任何方式缓存大多数RDD。
缓存通常会自动发生。以OS /平台或框架或工具为例。但是由于分布式计算中缓存的复杂性,我可能会忽略为什么缓存不能自动或性能影响。
所以我无法理解,为什么我必须显式缓存为,
答案 0 :(得分:13)
主观的理由清单:
在不对应用语义进行假设的情况下自动缓存是不可能的。特别是:
值得注意的是: