繁体   English   中英

从缓存中删除火花 dataframe

[英]Drop spark dataframe from cache

我正在使用带有 python api 的 Spark 1.3.0。 在转换巨大的数据帧时,我缓存了许多 DF 以加快执行速度;

df1.cache()
df2.cache()

一旦使用某些 dataframe 结束并且不再需要我如何从 memory 中删除 DF(或取消缓存它??)?

例如, df1用于整个代码,而df2用于少量转换,之后就不再需要它。 我想强行删除df2以释放更多 memory 空间。

只需执行以下操作:

df1.unpersist()
df2.unpersist()

Spark 自动监控每个节点上的缓存使用情况,并以最近最少使用 (LRU) 的方式丢弃旧数据分区。 如果您想手动删除 RDD 而不是等待它从缓存中掉出来,请使用 RDD.unpersist() 方法。

如果数据框注册为 SQL 操作的表,例如

df.createGlobalTempView(tableName) // or some other way as per spark verision

然后可以使用以下命令删除缓存, off-course spark也会自动执行

火花 >= 2.x

这里sparkSparkSession一个对象

  • 从缓存中删除特定表/df

     spark.catalog.uncacheTable(tableName)
  • 从缓存中删除所有表/dfs

     spark.catalog.clearCache()

火花 <= 1.6.x

  • 从缓存中删除特定表/df

     sqlContext.uncacheTable(tableName)
  • 从缓存中删除所有表/dfs

     sqlContext.clearCache()
  1. 如果您需要在删除过程中阻止 => df2.unpersist(true)
  2. 解锁移除 => df2.unpersist()

这是一个简单的实用程序上下文管理器,可以为您处理这些问题:

@contextlib.contextmanager
def cached(df):
    df_cached = df.cache()
    try:
        yield df_cached
    finally:
        df_cached.unpersist()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM