假设我有这个代码(Spark 1.6.2):
val finalDF: DataFrame = if (test) {
val df = sqlContext.read.parquet(url).cache
df.write.parquet(url2)
df }
else
sqlContext.read.parquet(other_url)
如果我运行finalDF.unpersist
,它确实会从内存中清除finalDF
/ df
的数据吗?如果没有,我该怎么办?
答案 0 :(得分:2)
是(如果测试属实)。
基本上当缓存更改数据帧(即数据帧不是不可变的)时,这意味着如果finalDF是df,那么你将是unrsisting df。如果test为false,则不会创建df,并且sqlContext.read.parquet的结果不会被缓存,但调用unpersist不会造成任何伤害。
您可以通过查看UI(默认情况下在端口4040中)并查看存储选项卡来自行查看。它会在unpersist之前显示缓存的df,之后会消失。
答案 1 :(得分:1)
Spark在最近使用的(LRU)算法中删除旧数据分区。但是,如果您需要手动清理dataFrame.unpersist()
,请按预期工作。
有关详细信息,请参阅http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence