使用 df.cache() 后是否必须使用 df.unpersist() ?

Mar*_*kus 1 scala apache-spark apache-spark-sql

df.unpersist()使用后是否必须要df.cache()释放缓存才能使用?如果我将 DataFrame 存储在缓存中而不取消持久化,那么代码运行得非常快。然而,当我使用时,它需要更长的时间df.unpersist()。

ste*_*ino 5

这不是强制性的,但如果您还有很长的路要走,并且想要释放不再需要的资源,强烈建议您这样做。Spark 无论如何都会在 LRU 的基础上为你管理这些;引用文档:

Spark 自动监控每个节点上的缓存使用情况,并以最近最少使用 (LRU) 方式删除旧数据分区。

该unpersist方法默认执行此操作,但请考虑您可以unpersist通过使用 ablocking = false参数调用它来显式异步调用。

df.unpersist(false) // unpersists the Dataframe without blocking
Run Code Online (Sandbox Code Playgroud)

Spark 2.3.0 的方法unpersist记录在此处。