PySpark调用cache()后,Spark UI中是否有缓存操作的指示?
PySpark cache() 状态排查与Spark UI查看方法
Spark UI的Storage页面完全可以查看缓存操作的状态,你看不到缓存信息大概率是因为缓存还没实际执行,或者存在其他配置/代码层面的问题,以下是具体排查点:
缓存是惰性执行的:调用
cache()只是给DataFrame/RDD打上"要缓存"的标记,只有当触发行动操作(比如count()、show()、collect())之后,Spark才会实际执行缓存逻辑,这时候Storage页面才会出现对应的缓存条目。如果只是调用了cache()但没触发行动,Storage页面自然没有显示。验证缓存是否标记成功:可以在代码里直接查看DataFrame的存储级别:
print(df.storageLevel)如果返回类似
StorageLevel(True, True, False, True, 1),说明已经成功标记缓存(第一个True表示启用内存缓存,第二个True表示内存不足时写入磁盘)。确认Spark UI的对应应用:每个Spark应用都有独立的UI端口(默认4040,多个应用依次递增为4041、4042等),要确保你打开的是当前运行应用的UI页面,而不是其他已结束或无关的应用。另外,如果作业运行结束后过了很久才查看,集群可能已经清理了缓存数据。
手动验证缓存生效:
- 第一次执行行动操作(比如
df.count()),记录耗时; - 立即再次执行同一行动操作,对比耗时。如果第二次耗时明显缩短,说明缓存已经生效(Spark直接从缓存读取数据,无需重新计算)。
- 也可以通过代码查看所有持久化的RDD(DataFrame底层基于RDD):
返回的字典中如果包含你的DataFrame对应的RDD ID,说明缓存已生效。print(spark.sparkContext.getPersistentRDDs())
- 第一次执行行动操作(比如
其他可能的原因:
- 集群内存不足:Spark会根据LRU策略自动清理缓存数据释放内存,这时候Storage页面可能看不到缓存。可以调整
spark.storage.memoryFraction等配置来提高缓存内存的占比。 - 代码逻辑问题:如果调用
cache()之后,又对DataFrame做了转换并重新赋值(比如df = df.filter(...)),此时缓存的是原始DataFrame,而你后续使用的是新的DataFrame,缓存没有被实际使用,所以不会在Storage页面显示。
- 集群内存不足:Spark会根据LRU策略自动清理缓存数据释放内存,这时候Storage页面可能看不到缓存。可以调整
内容的提问来源于stack exchange,提问作者nirkov
相关产品推荐
相关产品推荐

