如何确保我的 DataFrame 释放内存?

How to make sure my DataFrame frees its memory?

我有一份 Spark/Scala 的工作:

执行(3)时,我不再需要df1。我想确保它的 space 被释放。我 cached 在 (1) 因为这个 DataFrame 在 (2) 中使用,这是确保我不会每次都重新计算它但只重新计算一次的唯一方法。

我需要释放它 space 并确保它被释放。我有哪些选择?

想到了这些,但好像还不够:

您能否使用适当的 Spark 文档记录您的答案 link?

Spark 用户无法手动触发垃圾回收。

分配 df=null 不会释放太多内存,因为 DataFrame 不保存数据 - 它只是计算的描述。

如果您的应用程序存在内存问题,请查看 Garbage Collection tuning guide。它建议从哪里开始以及可以更改哪些内容以改进 GC

df.unpersist 应该足够了,但不一定会立即释放它。它只是标记要删除的数据框。

您可以使用 df.unpersist(blocking = true) 它将阻塞,直到数据帧被删除,然后再继续。

df.unpersist(blocking = true) 这将解决问题

进一步解释 -> https://sparkbyexamples.com/spark/spark-dataframe-cache-and-persist-explained/