如何确保我的 DataFrame 释放内存?
How to make sure my DataFrame frees its memory?
我有一份 Spark/Scala 的工作:
- 1: 计算一个大的 DataFrame
df1
+ cache
将其存入内存
- 2:使用
df1
计算dfA
- 3:将原始数据读入
df2
(再一次,它很大)+ cache
it
执行(3)时,我不再需要df1
。我想确保它的 space 被释放。我 cached
在 (1) 因为这个 DataFrame 在 (2) 中使用,这是确保我不会每次都重新计算它但只重新计算一次的唯一方法。
我需要释放它 space 并确保它被释放。我有哪些选择?
想到了这些,但好像还不够:
df=null
df.unpersist()
您能否使用适当的 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/
我有一份 Spark/Scala 的工作:
- 1: 计算一个大的 DataFrame
df1
+cache
将其存入内存 - 2:使用
df1
计算dfA
- 3:将原始数据读入
df2
(再一次,它很大)+cache
it
执行(3)时,我不再需要df1
。我想确保它的 space 被释放。我 cached
在 (1) 因为这个 DataFrame 在 (2) 中使用,这是确保我不会每次都重新计算它但只重新计算一次的唯一方法。
我需要释放它 space 并确保它被释放。我有哪些选择?
想到了这些,但好像还不够:
df=null
df.unpersist()
您能否使用适当的 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/