我有一个Spark / Scala工作,我这样做:
df1
+ cache
将其存入内存df1
计算dfA
df2
(再次,它的大)+ cache
它执行(3)时,我不再需要df1
。我想确保它的空间被释放。我在(1)处cached
因为这个DataFrame在(2)中被使用,并且它是确保我不会每次都重新计算它而只是一次的唯一方法。
我需要释放它的空间并确保它被释放。我有什么选择?
我想到了这些,但似乎还不够:
df=null
df.unpersist()
您能用适当的Spark文档链接记录您的答案吗?
答案 0 :(得分:2)
df.unpersist
应该足够了,但不一定能立即释放它。它仅标记要删除的数据帧。
您可以使用df.unpersist(blocking = true)
来阻止数据框被删除,然后再继续。
答案 1 :(得分:1)
Spark的用户无法手动触发垃圾回收。
分配df=null
不会释放太多内存,因为DataFrame不保存数据 - 它只是对计算的描述。
如果您的应用程序有内存问题,请查看Garbage Collection tuning guide。它建议从哪里开始以及可以改变什么来改进GC