Scala Spark:数据帧缓存/持久性是否从一个传输到另一个?
假设我有这个代码(Spark 1.6.2): 如果我运行Scala Spark:数据帧缓存/持久性是否从一个传输到另一个?,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,假设我有这个代码(Spark 1.6.2): 如果我运行finalDF.unpersist,它真的会从内存中清除finalDF/df的数据吗?如果没有,我该怎么做?是(如果测试为真) 基本上,当缓存更改数据帧时(即数据帧不是不可变的),这意味着如果finalDF是df,那么您将取消持久化df。如果test为false,那么就不会创建df,并且sqlContext.read.parquet的结果也不会缓存,但是调用unpersist不会造成任何伤害 您可以通过查看UI(默认情况下在端口4040中)
finalDF.unpersist
,它真的会从内存中清除finalDF
/df
的数据吗?如果没有,我该怎么做?是(如果测试为真)
基本上,当缓存更改数据帧时(即数据帧不是不可变的),这意味着如果finalDF是df,那么您将取消持久化df。如果test为false,那么就不会创建df,并且sqlContext.read.parquet的结果也不会缓存,但是调用unpersist不会造成任何伤害
您可以通过查看UI(默认情况下在端口4040中)并签出存储选项卡来自己检查它。它将在取消持久化之前和之后显示缓存的df。Spark使用最近使用最少的(LRU)算法删除旧数据分区。但是,如果您需要手动清理数据帧,unpersist()的工作原理与您预期的一样。 有关详细信息,请参阅
val finalDF: DataFrame = if (test) {
val df = sqlContext.read.parquet(url).cache
df.write.parquet(url2)
df }
else
sqlContext.read.parquet(other_url)