我在用斯帕克做一些计算。每5分钟,我就有一个新的数据帧。我把它放进了一个叫做dict的录音机里
dict_1_hour[timestamp] = dataframe
新的数据帧进入dict,旧的数据帧从dict弹出,只有12个数据帧保存在其中,即最近1小时的数据。
所以我的问题是如何释放这些数据帧以确保没有内存泄漏?
一个dataframe的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应该自动释放未使用的变量。但我不知道这是否合适。我担心spark可能会保留数据帧,如果你不显式地释放它
所以请告诉我该用哪种方式
首先,与
RDD
类似的DataFrame
只是一个局部递归数据结构。在Python和JVM方面,我与任何其他对象都经历相同的垃圾收集周期。您必须考虑的第二部分是持久化数据(
cache
、persist
、cacheTable
、无序文件等)。这通常是由Spark内部处理的,除了unpersist
之外,您对它的生命周期没有太多的控制。记住这两件事,在对象上除了简单的
del
之外,没有什么可以做的。不过,如果
DataFrame
已注册为临时表,请确保先注销它:相关问题 更多 >
编程相关推荐