You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark中该缓存临时视图的方式是否有误?我的理解正确吗?

关于Spark缓存临时视图代码的问题

你的理解完全正确。

临时视图本质只是Spark SQL里的逻辑查询别名,本身不存储任何数据。原代码中:

  1. 先通过SQL查询创建临时视图temp_view,这一步只是把查询逻辑注册到Spark的元数据中;
  2. 调用spark.table("temp_view")会基于视图的查询逻辑生成一个新的DataFrame,再对这个DataFrame调用cache(),缓存的是这个DataFrame对应的数据集,但临时视图本身并没有和缓存绑定。

这意味着后续如果直接用spark.sql("select * from temp_view")查询,Spark还是会重新执行原来的SQL逻辑,不会用到之前缓存的DataFrame——除非你在代码里持续引用那个被缓存的DataFrame对象。

正确的缓存方式有两种:

  • 先缓存DataFrame,再注册为视图:
val df = spark.sql(
  s"""
     |...
   """.stripMargin).cache()
df.createOrReplaceTempView("temp_view")

这种方式下,后续通过视图查询时,会直接复用缓存的DataFrame数据。

  • 缓存后将DataFrame重新覆盖原视图:
spark.sql(
  s"""
     |...
   """.stripMargin).createOrReplaceTempView("temp_view")

val cachedDf = spark.table("temp_view").cache()
cachedDf.createOrReplaceTempView("temp_view")

通过覆盖视图,让原视图指向已缓存的DataFrame,后续查询视图就会使用缓存数据。

内容的提问来源于stack exchange,提问作者Alexander Lopatin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 16:35:23