Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 从缓存中删除spark数据帧_Apache Spark_Apache Spark Sql_Spark Streaming - Fatal编程技术网

Apache spark 从缓存中删除spark数据帧

Apache spark 从缓存中删除spark数据帧,apache-spark,apache-spark-sql,spark-streaming,Apache Spark,Apache Spark Sql,Spark Streaming,我将Spark 1.3.0与python api一起使用。在转换巨大的数据帧时,我缓存了许多DFs以加快执行速度 df1.cache() df2.cache() 一旦某些数据帧的使用结束并且不再需要,如何从内存中删除DF(或取消缓存) 例如,df1在整个代码中使用,而df2用于少量转换,之后就不再需要了。我想强制删除df2,以释放更多的内存空间 只需执行以下操作: df1.unpersist() df2.unpersist() Spark自动监视每个节点上的缓存使用情况并退出 以最近最少使用

我将Spark 1.3.0与python api一起使用。在转换巨大的数据帧时,我缓存了许多DFs以加快执行速度

df1.cache()
df2.cache()
一旦某些数据帧的使用结束并且不再需要,如何从内存中删除DF(或取消缓存)

例如,
df1
在整个代码中使用,而
df2
用于少量转换,之后就不再需要了。我想强制删除
df2
,以释放更多的内存空间

只需执行以下操作:

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 这里
spark
SparkSession

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

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

     spark.catalog.uncacheTable(tableName)
    
     spark.catalog.clearCache()
    
     sqlContext.uncacheTable(tableName)
    
     sqlContext.clearCache()
    

火花
  • 如果在删除过程中需要阻塞=>df2.unpersist(true)
  • 取消阻止删除=>df2.unpersist()

  • 并注意在沿袭结束后取消持久化df,因此在涉及缓存df的最后一个操作之后。我对一个数据帧“df”尝试了此操作,当我执行df.show()时,df仍在显示数据。它实际上什么时候取消持久性?@Paul对于记录来说,这实际上不是重复的原因是DataFrame API与RDD API不同。然而,这个方法调用在它们之间是共享的。为什么类型df.show()仍然显示数据?只要数据帧的输入源可用,df.show()将显示数据,而不考虑缓存。