Spark:是数据帧缓存/持久性从一个传输到另一个



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

是(

如果测试为真)。

基本上,当缓存更改数据帧时(即数据帧不可变),这意味着如果 finalDF 是 df,那么您将取消持久化 df。如果测试为假,那么一开始就不会创建 df,并且 sqlContext.read.parquet 的结果无论如何都不会缓存,但调用 unpersist 不会造成任何伤害。

您可以通过查看 UI(默认情况下在端口 4040 中)并查看存储选项卡来自行检查。它将在取消持久化之前和消失之后显示缓存的 df。

Spark 在最近最少使用的 (LRU) 算法中丢弃旧数据分区。但是,如果您需要手动清洁dataFrame.unpersist()可以按预期工作。有关详细信息,请参阅 http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence

相关内容

  • 没有找到相关文章

最新更新