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

Spark行动操作后内存数据去向及重复执行show是否重读源文件的问询

Spark惰性执行后的内存变化与重复执行问题

核心结论

默认情况下,执行完show()这类行动操作后,内存中的中间结果会被清除;第二次执行df1.show()时,Spark会重新读取example.csv文件,从头执行所有转换操作。

具体分析

  • Spark的转换操作(比如withColumn)是惰性的,只有遇到行动操作(比如show())才会触发实际计算。
  • 在你的代码示例中,第一次df1.show()触发计算时,Spark会按执行计划完成:读取CSV文件 → 生成原始DataFrame df → 添加列Y得到df1 → 输出前20行。计算完成后,这些临时生成的中间数据不会被保留,会被Spark的内存管理机制回收。
  • 当你第二次调用df1.show()时,由于之前的中间结果没有被缓存,Spark会重新解析执行计划,再次读取example.csv,重复整个转换和计算流程。

如何避免重复读取

如果想让中间结果保留在内存中,避免重复计算,需要显式调用缓存方法:

df1 = df.withColumn("Y", df["X"]).cache()  # 或者用persist()指定存储级别
df1.show()

执行完第一次show()后,df1的数据会被缓存到内存(或指定存储介质),第二次show()就会直接使用缓存的数据,无需重新读取原文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:51:03