【发布时间】:2018-03-02 17:11:49
【问题描述】:
我有一个 Spark/Scala 工作,我在其中执行此操作:
- 1:计算一个大DataFrame
df1+cache到内存中 - 2:使用
df1计算dfA - 3:将原始数据读入
df2(同样,它很大)+cache它
执行 (3) 时,我不再需要 df1。我想确保它的空间得到释放。我在 (1) 处 cached 因为这个 DataFrame 在 (2) 中使用,它是确保我不会每次都重新计算它的唯一方法,而是只重新计算一次。
我需要释放它的空间并确保它被释放。我有哪些选择?
我想到了这些,但似乎还不够:
df=nulldf.unpersist()
您能否使用适当的 Spark 文档链接记录您的答案?
【问题讨论】:
-
可能是xy problem 的一个实例——你为什么要强制GC?你想解决什么问题?
-
在计算时,我的内存变得非常满,我想释放一些我不再需要的 DataFrame 使用的空间(我缓存它以减轻一些冗余计算,但我没有想要它了)。
-
我进行了编辑以避免陷入 XY 问题。
-
@belka 你的缓存空间或非缓存空间用完了吗?如果不是缓存空间耗尽,清除缓存将无济于事。
-
@belka 内存有多个部分,其中一个是缓存,另一个是常规执行堆空间。当缓存空间用完时,程序不会崩溃,只是一些分区不会被缓存并在需要时重新评估。当执行堆用完时,您可能会收到内存不足错误。如果您的常规堆内存用完了,那么释放缓存空间将无济于事
标签: scala apache-spark garbage-collection spark-dataframe