从缓存中删除spark数据帧

ank*_*tel 22 apache-spark spark-streaming apache-spark-sql

我使用Spark 1.3.0和python api.在转换庞大的数据帧时,我会缓存许多DF以加快执行速度;

df1.cache()
df2.cache()
Run Code Online (Sandbox Code Playgroud)

一旦某些数据帧的使用结束并且不再需要,我怎样才能从内存中删除DF(或取消缓存它?)?

例如,df1在用于df2少量转换的情况下使用整个代码,之后,它永远不需要.我想强行放下df2以释放更多的内存空间.

Ale*_*der 44

只需执行以下操作:

df1.unpersist()
df2.unpersist()
Run Code Online (Sandbox Code Playgroud)

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

  • 并且注意在谱系结束后unfist df,所以在涉及缓存df的最后一个动作之后. (6认同)
  • @spacedustpi 它从缓存中删除数据帧。(如果内存空间不足,则在内存或磁盘上的某个位置)通过调用 show,您触发了一个操作,然后从一开始就完成了计算以向您显示数据。 (3认同)
  • 我对我的数据帧之一“df”尝试了此操作,当我执行 df.show() 时,df 仍在显示数据。它什么时候真正消失? (2认同)

mrs*_*vas 19

如果数据帧注册为SQL操作的表,就像

df.createGlobalTempView(tableName) // or some other way as per spark verision
Run Code Online (Sandbox Code Playgroud)

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

Spark> = 2.x

spark是一个对象SparkSession


Spark <= 1.6.x

  • 我为我的 RDD 'df' 尝试了这些。为什么输入 df.show() 仍然显示数据? (2认同)
  • 只要数据帧的输入源可用,df.show() 就会显示数据,而与缓存无关。 (2认同)