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

时间:2018-03-02 17:11:49

标签: scala apache-spark garbage-collection spark-dataframe

我有一个Spark / Scala工作,我这样做:

  • 1:计算一个大的DataFrame df1 + cache将其存入内存
  • 2:使用df1计算dfA
  • 3:将原始数据读入df2(再次,它的大)+ cache

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

我需要释放它的空间并确保它被释放。我有什么选择?

我想到了这些,但似乎还不够:

  • df=null
  • df.unpersist()

您能用适当的Spark文档链接记录您的答案吗?

2 个答案:

答案 0 :(得分:2)

df.unpersist应该足够了,但不一定能立即释放它。它仅标记要删除的数据帧。

您可以使用df.unpersist(blocking = true)来阻止数据框被删除,然后再继续。

答案 1 :(得分:1)

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

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

如果您的应用程序有内存问题,请查看Garbage Collection tuning guide。它建议从哪里开始以及可以改变什么来改进GC