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

Delta Lake转Pandas时内存消耗过高的原因求助

Delta Table转Pandas DataFrame内存消耗更高的原因分析
  • 分布式到本地的数据传输与中间开销
    Delta Table是分布式存储的,执行my_delta_table.select("*").toPandas()时,Spark会先将集群节点上的所有数据拉取到Driver节点,这个过程中会使用Spark自身的内存结构(如Tungsten二进制格式)暂存数据,再完成到Pandas DataFrame的转换。而pandas.read_parquet()是直接从存储系统读取文件,跳过了分布式数据聚合、Spark数据格式序列化/反序列化的额外内存占用。

  • Spark数据格式的内存冗余
    Spark为分布式计算优化的内部数据表示,在转换为Pandas的Python对象时,会产生额外的内存开销——比如Spark的Row对象包含更多元数据,转换时需要将这些结构拆解为Pandas的原生数据类型,过程中临时占用的内存无法立即释放。而直接读取Parquet的Pandas会直接解析为高效的原生格式,没有这类冗余。

  • 双份数据的临时内存占用
    调用toPandas()时,Driver内存中会同时存在Spark格式的数据集和正在生成的Pandas DataFrame,相当于短时间内加载了两份全量数据。而pandas.read_parquet()只会在内存中保留一份Pandas格式的数据,内存利用率更高。

  • 分区与读取策略的额外开销
    Delta Table通常带有分区设计,Spark读取全量数据时会扫描所有分区文件,并在Driver端完成数据聚合,过程中可能会缓存分区元数据或临时分片数据,进一步增加内存消耗。而Pandas读取Parquet时直接解析列存储结构,无需处理分布式分区的额外逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:20:58