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

Spark缓存DataSet后再缓存其临时表,会生成两份缓存数据吗?

Spark缓存DataSet与临时表的重复缓存问题

这个问题问得很到位,我来给你掰扯清楚——Spark只会缓存一份数据,不会生成分别对应DataSet和临时表的两份独立缓存。原因主要有这几点:

  • 临时表只是DataSet的"别名",没有复制数据
    当你调用dataSet.registerTempTable("temp_table")时,并没有把DataSet的数据复制一份生成新的表,只是给这个DataSet的逻辑执行计划绑定了一个表名。说白了,temp_table就是原DataSet的"别名",两者共享完全相同的计算 lineage 和底层执行逻辑。

  • 两种缓存操作指向的是同一个底层数据
    不管是调用dataSet.cache()还是sqlContext.cacheTable("temp_table"),本质都是告诉Spark:"把这个计算逻辑对应的结果缓存起来"。因为临时表和原DataSet是同一个逻辑计划,Spark会识别出这两个缓存请求指向的是同一个数据,只会执行一次缓存操作。

  • 可以通过Spark UI验证
    你可以在运行代码后打开Spark UI的Storage页面查看,只会看到一条缓存条目,对应的就是这个DataSet/临时表的存储信息,不会出现两个独立的缓存项。

另外提一句,你代码里有个小笔误:dataset.cache()应该是dataSet.cache()(Scala大小写敏感,注意变量名一致),不过这不影响缓存逻辑的判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:55:48