Apache spark 如何检查我的RDD或数据帧是否缓存?

Apache spark 如何检查我的RDD或数据帧是否缓存?,apache-spark,Apache Spark,我已经创建了一个数据帧,比如说df1。我使用df1.cache()缓存了它。如何检查是否已缓存此文件? 还有一种方法可以让我查看所有缓存的RDD或数据帧。您可以调用getStorageLevel。在数据帧和RDD上使用memory,以确定数据集是否在内存中 对于数据帧,请执行以下操作: scala> val df = Seq(1, 2).toDF() df: org.apache.spark.sql.DataFrame = [value: int] scala> df.storag

我已经创建了一个数据帧,比如说df1。我使用df1.cache()缓存了它。如何检查是否已缓存此文件?
还有一种方法可以让我查看所有缓存的RDD或数据帧。

您可以调用
getStorageLevel。在数据帧和RDD上使用memory
,以确定数据集是否在内存中

对于数据帧,请执行以下操作:

scala> val df = Seq(1, 2).toDF()
df: org.apache.spark.sql.DataFrame = [value: int]

scala> df.storageLevel.useMemory
res1: Boolean = false

scala> df.cache()
res0: df.type = [value: int]

scala> df.storageLevel.useMemory
res1: Boolean = true
对于RDD,请执行以下操作:

scala> val rdd = sc.parallelize(Seq(1,2))
rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[1] at parallelize at <console>:21

scala> rdd.getStorageLevel.useMemory
res9: Boolean = false

scala> rdd.cache()
res10: rdd.type = ParallelCollectionRDD[1] at parallelize at <console>:21

scala> rdd.getStorageLevel.useMemory
res11: Boolean = true
scala>valrdd=sc.parallelize(Seq(1,2))
rdd:org.apache.spark.rdd.rdd[Int]=ParallelCollectionRDD[1]位于parallelize at:21
scala>rdd.getStorageLevel.useMemory
res9:Boolean=false
scala>rdd.cache()
res10:rdd.type=ParallelCollectionRDD[1]at并行化at:21
scala>rdd.getStorageLevel.useMemory
res11:Boolean=true
@Arnab,

你在Python中找到这个函数了吗
以下是数据帧DF的示例:

希望这有帮助

Ram

在Java和Scala中,可以使用以下方法查找所有持久化的RDD:
sparkContext.getPersistentRDDs()

`

看起来此方法在python中尚不可用:

但我们可以用这种短期的手段:

sparkContext._jsc.getPersistentRDDs().items()
从Spark(Scala)2.1.0开始,可以按如下方式检查数据帧:

dataframe.storageLevel.useMemory
val isCached: Boolean = storageLevel.useMemory || storageLevel.useDisk || storageLevel.useOffHeap

您可以为
数据帧
检索
RDD
自和自的存储级别

val storageLevel = rdd.getStorageLevel
val storageLevel = dataframe.storageLevel
然后,您可以按如下方式检查其存储位置:

dataframe.storageLevel.useMemory
val isCached: Boolean = storageLevel.useMemory || storageLevel.useDisk || storageLevel.useOffHeap

谢谢你的回答。python中是否有类似的函数?我想是的,请检查python API以确定。我似乎找不到它,如果您知道它可能在哪里,请帮助我超越此标志(存储级别)如果缓存的RDD被覆盖,例如被另一个RDD的缓存函数调用覆盖,并且内存太少而无法同时缓存,则将重置为无?这不会告诉您RDD是否在内存中。这只是说明RDD是否是要缓存在内存中的候选对象。例如什么?DataFrame类中没有这样的方法。is_cached不是一个方法,它是DataFrame类的一个属性。