Spark:DataFrame缓存/持久性是从一个转移到另一个?

时间:2017-01-24 13:36:10

标签: scala apache-spark apache-spark-sql

假设我有这个代码(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的数据吗?如果没有,我该怎么办?

2 个答案:

答案 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