在Spark中,每次对RDD执行任何操作时,都会重新计算RDD。因此,如果我们知道RDD将要被重用,我们应该显式地缓存RDD。
假设Spark决定懒惰地缓存所有的RDD,并使用LRU自动将最相关的RDD保留在内存中(这是大多数缓存工作方式)。这将对开发人员非常有帮助,因为他不必考虑缓存并集中精力于应用程序。我也看不出它如何对性能产生负面影响,因为很难跟踪程序内变量(RDD)被使用的次数,大多数程序员将决定缓存大多数RDD。
缓存通常是自动发生的。以操作系统/平台、框架或工具为例。但是由于分布式计算中缓存的复杂性,我可能会忽略为什么缓存不能自动进行或性能影响。
因此,我不明白为什么我必须显式地缓存,因为:
1.它看起来不美观
2.很容易被忽视
3.很容易过度/欠度使用
假设Spark决定懒惰地缓存所有的RDD,并使用LRU自动将最相关的RDD保留在内存中(这是大多数缓存工作方式)。这将对开发人员非常有帮助,因为他不必考虑缓存并集中精力于应用程序。我也看不出它如何对性能产生负面影响,因为很难跟踪程序内变量(RDD)被使用的次数,大多数程序员将决定缓存大多数RDD。
缓存通常是自动发生的。以操作系统/平台、框架或工具为例。但是由于分布式计算中缓存的复杂性,我可能会忽略为什么缓存不能自动进行或性能影响。
因此,我不明白为什么我必须显式地缓存,因为:
1.它看起来不美观
2.很容易被忽视
3.很容易过度/欠度使用