apache-spark - 如何取消在另一个数据帧之上创建的缓存数据帧
问题描述
如何取消在另一个数据帧之上创建的缓存数据帧
我已经从父 df 创建了多个数据框,在代码的末尾,我在完成所有转换后创建了一个最终的 df,它将包含大约 1000 亿条记录,并且之前的 df 也将处理相同的数量数据的。因此,我决定在创建最终的 df 并准备写入镶木地板文件后释放所有 df。
有人可以帮助我如何在将最终 df 保存到 hdfs 中的镶木地板文件之前释放未使用的 df,我希望这将释放内存空间并有助于更快地将最终 df 写入镶木地板文件
解决方案
如果您使用 缓存数据帧df.cache()
,则可以df.unpersist()
从内存中删除该数据帧。如果你已经覆盖了变量df
,那么你就不能取消持久化它,因为引用丢失了。
还有一种从缓存中清除所有内容的最终方法,即spark.catalog.clearCache()
,但这可能不是您想要的,因为您想保留最终结果数据帧。
重要的是不要覆盖与缓存数据帧相对应的任何变量,以便保留对该数据帧的引用。
推荐阅读
- c++ - 在 PhysDesignAssignment1.exe 中的 0x0FE7DB1B (ucrtbased.dll) 处引发异常:0xC0000005:访问冲突读取位置 0xFDFDFDED
- import - Isabelle 错误无法更新完成的理论“HOL.Finite_Set”是什么意思?
- numpy - Pytorch 或 Numpy 批量矩阵操作
- assembly - 返回地址修改导致调用约定异常
- r - 使用 R 抓取 HTML 数据
- google-apps-script - 删除大型数据集的重复项,真实重复项(整行重复)和基于一列的重复项
- android - flutter android和ios app的区别
- junit4 - Cucumber java中的Wiremock存根初始化错误,放心
- vue.js - 如何正确处理 v-if 语句中的动态元素?
- c# - 将字符串转换为以逗号分隔的十进制格式