在没有SQLContext的情况下清除pyspark中的缓存

3

考虑到 pySpark 文档中对于 SQLContext 的说明:"从Spark 2.0开始,已被SparkSession取代。"

如何在不使用 SQLContext 的情况下从内存缓存中删除所有缓存的表?

例如,假设 spark 是一个 SparkSessionsc 是一个 sparkContext

from pyspark.sql import SQLContext
SQLContext(sc, spark).clearCache()
1个回答

1
我认为除了pyspark中的SQLContext之外,没有其他地方可以使用clearCache。下面的示例使用现有的SparkContext实例使用SQLContext.getOrCreate创建一个实例:
SQLContext.getOrCreate(sc).clearCache()

在Scala中,通过SparkSession可以更轻松地实现相同的功能:
spark.sharedState.cacheManager.clearCache()

作为Clay提到的另一种选择,可以通过目录进行操作:
spark.catalog.clearCache

来自Jacek Laskowski的gitbooks中的最后一个:

spark.sql("CLEAR CACHE").collect

参考文献: https://jaceklaskowski.gitbooks.io/mastering-spark-sql/spark-sql-caching-and-persistence.html

1
谢谢,这让我发现从pySpark访问底层的Java SparkSession可以做到同样的事情 spark._jsparkSession.sharedState().cacheManager().clearCache() - Clay
你非常热衷于尽可能地优化你的代码 :) - abiratsis
2
我还发现spark.catalog似乎是SQLContext的替代品,尽管在2.2.0版本中没有很好的文档说明。因此,spark.catalog.clearCache()也可以清除缓存。 - Clay
1
好的,我也遇到了这个问题,从文档中得出结论,它主要用于与Hive交互、存储表信息等。干得好! - abiratsis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接