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

PySpark DataFrame的MEMORY_AND_DISK_DESER存储级工作机制咨询

关于PySpark DataFrame默认MEMORY_AND_DISK_DESER存储级的行为解释

版本变化说明

Spark 3.0及以后版本中,DataFrame的默认缓存/持久化存储级已从MEMORY_AND_DISK改为MEMORY_AND_DISK_DESER,目的是和Scala版本的行为保持一致。

MEMORY_AND_DISK_DESER在PySpark中的具体行为

结合Spark 3.5.1文档的描述,需区分JVM端和Python端的处理逻辑:

  • 内存存储逻辑:DataFrame的底层是JVM中的Row对象集合,使用MEMORY_AND_DISK_DESER时,JVM会将这些Row以反序列化的原生对象形式存在内存中——这也是该存储级名称中DESER(反序列化)的核心含义。当Python端需要访问数据时,JVM会把Row序列化为字节流传输给Python Worker,Worker再将其反序列化为Python可操作的对象。
  • 磁盘落盘逻辑:当内存不足以容纳所有数据时,JVM会将序列化后的Row数据写入磁盘(使用Spark自身的序列化格式,而非Python的Pickle)。后续需要读取磁盘数据时,JVM会先将其反序列化为Row对象,再传输给Python Worker处理。

关于文档描述的注意点

文档中提到“在Python中,存储的对象始终会通过Pickle库进行序列化,因此选择序列化级别无关紧要”,这句话其实是针对Python RDD的场景:Python RDD的元素是原生Python对象,缓存时无论选择哪种存储级,都会用Pickle序列化存储。但DataFrame的底层依赖JVM的RDD实现,所以存储级的选择会直接影响JVM端的存储形式,这也是为什么DataFrame默认改为MEMORY_AND_DISK_DESER来对齐Scala行为的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:25:31