我正在使用spark做一些计算。每隔5分钟,我就会得到一个新的数据框。我把它放在这样的字典中dict_1_hour
dict_1_hour[timestamp] = dataframe
新数据帧进入字典,旧数据帧从字典弹出。其中仅保留12个数据帧,即最近1小时的数据。
所以我的问题是我应该如何释放那些数据帧以确保没有内存泄漏?
一种用于数据框的API似乎可以做到这一点。(我不知道该参数的作用)
unpersist(blocking=True)
Marks the DataFrame as non-persistent, and remove all blocks for it from memory and disk.
我认为的另一种方法是从dict弹出数据框。
dict_1_hour.pop(timestamp)
Python应该自动释放未使用的变量。但是我不知道这里是否合适。我担心如果您不明确地释放火花,火花可能会使数据框保持不变
所以请建议我应该使用哪种方式
首先DataFrame
,类似于RDD
,只是一个本地递归数据结构。我在Python和JVM端都经历了与任何其他对象相同的垃圾收集周期。
你必须要考虑的第二部分是持续的数据(cache
,persist
,cacheTable
,随机文件等)。通常,这由Spark内部处理,并且不排除unpersist
您对其生存期没有太多控制权。
牢记这两件事,除了del
在对象上简单之外,没有什么可以做的。
try:
del dict_1_hour[timestamp]
except KeyError:
pass
不过,如果DataFrame
已注册为临时表,请确保先注销它:
from py4j.protocol import Py4JError
try:
sqlContext.dropTempTable("df")
except Py4JError:
pass
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句