Apache spark 如何检查数据帧之前是否已缓存/持久化?

Apache spark 如何检查数据帧之前是否已缓存/持久化?,apache-spark,spark-dataframe,Apache Spark,Spark Dataframe,对于spark的RDD对象,这非常简单,因为它公开了一个getStorageLevel方法,但DF似乎没有公开任何类似的方法。有人吗?您可以使用spark 2中的目录(org.apache.spark.sql.Catalog.Catalog)检查是否缓存了数据帧 代码示例: val sparkSession = SparkSession.builder. master("local") .appName("example") .getOrCreate()

对于spark的RDD对象,这非常简单,因为它公开了一个getStorageLevel方法,但DF似乎没有公开任何类似的方法。有人吗?

您可以使用spark 2中的
目录(org.apache.spark.sql.Catalog.Catalog)
检查是否缓存了数据帧

代码示例:

  val sparkSession = SparkSession.builder.
      master("local")
      .appName("example")
      .getOrCreate()

    val df = sparkSession.read.csv("src/main/resources/sales.csv")
    df.createTempView("sales")

    //interacting with catalog

    val catalog = sparkSession.catalog

    //print the databases

    catalog.listDatabases().select("name").show()

    // print all the tables

    catalog.listTables().select("name").show()

    // is cached
    println(catalog.isCached("sales"))
    df.cache()
    println(catalog.isCached("sales"))
使用上述代码,您可以列出所有表,并检查是否缓存了表


您可以检查工作代码示例

如果缓存了数据帧,则新的.cache或.persist不会带来任何开销。为什么您需要知道它是否被缓存?为什么不
df.rdd.getStorageLevel
?为什么需要df.getStorageLevel或其他类似is缓存的方法?对此有什么具体要求吗?是的,你是对的,我查过代码,但没有找到这样的代码method@DenieldePaula为什么很难理解这项调查的价值?再次调用
.cache()
不会告诉您:(a)它是否已被缓存(或者是否出现了问题)。(b)这次是否缓存了它(或者是否出现了问题……)。这是一个好问题。