在Spark UI中如何查看已缓存计算的可视化查询计划?
解决Spark UI中查看已缓存计算的可视化查询计划问题
核心原因
当你在链式调用中直接写cache().show()时,Spark会将缓存操作与执行动作合并执行,导致UI中的查询计划被简化,无法看到完整的原始执行链路。
解决方法
拆分缓存与执行操作:将缓存标记和触发执行的动作分开执行,让Spark先完成缓存的物化,同时保留完整的查询计划记录:
// 先定义并标记缓存 val joinedDF = dfFromRDD1.join(dfFromRDD2, dfFromRDD1.col("language").lt(dfFromRDD2.col("language")), "inner") joinedDF.cache() // 单独触发执行 joinedDF.show()找对UI查看入口:
- 若使用Spark SQL,切换到UI的SQL标签页,这里会展示包含缓存节点(
InMemoryTableScan)的完整可视化查询计划。 - 若基于RDD操作,进入Jobs标签页,点击对应Job后查看Stage中的DAG图,缓存的RDD会带有明显的缓存标识。
- 若使用Spark SQL,切换到UI的SQL标签页,这里会展示包含缓存节点(
启用详细计划展示(可选):
在Spark配置中添加spark.sql.ui.explainMode=extended,重启Spark后,SQL标签页会显示更详细的逻辑计划和物理计划,包含缓存相关的所有细节。
内容的提问来源于stack exchange,提问作者Vijay
相关产品推荐
相关产品推荐

