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

PySpark中由filter(where)生成的DataFrame存储位置咨询

PySpark DataFrame过滤后的数据存储问题解答

嘿,这个问题刚好点出了PySpark和普通Python最核心的差异之一,我来给你讲明白~

首先直接给结论:df_new并不是实际存储的数据集,它只是一个封装了「执行计划」的引用对象,和你理解的普通Python场景完全不一样。

为什么和普通Python不同?

普通Python里的DataFrame(比如Pandas)是立即计算的:当你执行过滤操作时,程序会立刻把数据加载到本地内存,生成一个新的、包含过滤后数据的对象,这个对象实实在在占着内存。

但PySpark遵循**懒执行(Lazy Evaluation)**原则:

  • 当你运行df_new = my_big_hdfs_df.where("my_column='testvalue'")时,PySpark根本没有去HDFS读取任何数据,也没有执行过滤操作。它只是在原DataFrame的执行计划基础上,追加了一个「过滤my_column等于testvalue」的逻辑步骤。
  • 这个df_new本身只是一个轻量的对象,只记录了要做什么操作,而没有任何实际的计算结果,所以几乎不占内存。

什么时候才会产生实际存储的数据?

只有当你执行**行动操作(Action)**时,PySpark才会把整个执行计划(从读取HDFS到过滤)提交给集群,真正执行计算:

  • 比如你调用df_new.show()、df_new.count()、df_new.collect()这些方法时,集群会计算出结果,然后返回给你。
  • 如果只是执行这些行动操作,计算出来的结果用完就会被丢弃,不会持久化存储。

怎么让数据持久化?

如果希望df_new对应的结果被保存下来,需要显式调用持久化方法:

  • 使用df_new.cache():默认把数据存在内存(如果内存不够会溢写到磁盘)
  • 使用df_new.persist(存储级别):可以指定更灵活的存储方式,比如只存在磁盘、内存+磁盘等
  • 持久化后的数据会存在Spark集群的工作节点上,而不是你的本地机器内存,后续再对df_new执行操作时,就不用重新计算了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:21:34