问题 如何检查我的RDD或数据帧是否被缓存?


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


8889
2017-09-07 07:40


起源



答案:


你可以打电话 getStorageLevel.useMemory 在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

9
2017-09-07 09:08



谢谢你的回答。 python中有类似的功能吗? - Arnab
我是这么认为的,请检查Python API以确定。 - Patrick McGloin
我似乎无法找到它,如果您对我的位置有任何想法,请帮助我 - Arnab
如果缓存的RDD被覆盖,则该标志(存储级别)是否会被重置为NONE。通过另一个RDD的缓存函数调用和太少的内存来缓存两者? - D. Müller
这不会告诉您RDD是否在内存中。这只是说RDD是否是一个 候选人 被缓存在内存中。 - Michael Mior


答案:


你可以打电话 getStorageLevel.useMemory 在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

9
2017-09-07 09:08



谢谢你的回答。 python中有类似的功能吗? - Arnab
我是这么认为的,请检查Python API以确定。 - Patrick McGloin
我似乎无法找到它,如果您对我的位置有任何想法,请帮助我 - Arnab
如果缓存的RDD被覆盖,则该标志(存储级别)是否会被重置为NONE。通过另一个RDD的缓存函数调用和太少的内存来缓存两者? - D. Müller
这不会告诉您RDD是否在内存中。这只是说RDD是否是一个 候选人 被缓存在内存中。 - Michael Mior


@Arnab,

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

DF.cache()
print DF.is_cached

希望这可以帮助。
内存


4
2017-07-11 18:54



什么的一个例子? DataFrame类中没有这样的方法。 - Viacheslav Rodionov
is_cached不是方法,它是DataFrame类的一个属性。 - cftarnas


从Spark(Scala)2.1.0开始,可以检查数据帧,如下所示:

dataframe.storageLevel.useMemory

2
2018-03-09 07:29





在Java和Scala中,以下方法可用于查找所有持久化的RDD: sparkContext.getPersistentRDDs()
这是文档的链接。`

看起来这个方法在python中还没有:

https://issues.apache.org/jira/browse/SPARK-2141

但是可以使用这个短期黑客攻击:

sparkContext._jsc.getPersistentRDDs().items()

1
2017-10-17 03:33