已缓存的RDD使用scala终端中的rdd.cache()方法存储在内存中。
这意味着它将消耗部分ram可用于Spark进程本身。
说过如果ram受到限制,并且越来越多的RDD被缓存了,什么时候会自动清理rdd缓存占用的内存?
答案 0 :(得分:2)
Spark将清除缓存的RDDs
和Datasets
/ DataFrames
:
RDD.unpersist
(How to uncache RDD?)/ Dataset.unpersist
方法或Catalog.clearCache
明确询问时。定期,cache cleaner:
Spark会自动监视每个节点上的缓存使用情况,并以最近最少使用(LRU)的方式删除旧数据分区。如果您想手动删除RDD而不是等待它从缓存中删除,请使用RDD.unpersist()方法。
当相应的分布式数据结构被垃圾收集时。
答案 1 :(得分:1)
如果不再使用RDD,Spark将自动取消保持/清除RDD或Dataframe。要检查是否缓存了RDD,请检查Spark UI并检查“存储”选项卡并查看“内存”详细信息。
从终端,我们可以使用'rdd.unpersist()'或'sqlContext.uncacheTable(“sparktable”)'
从内存中删除RDD或表。 Spark为Lazy Evaluation做,除非你说任何动作,否则它不会将任何数据加载或处理到RDD或DataFrame中。