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

Python中高效读取超大Parquet文件至内存的方案及格式选择咨询

字典还是DataFrame?先看你的使用场景
  • 要是你的数据字段不固定、每行结构差异大,或者主要做单条记录的键值操作,字典(尤其是嵌套结构)更灵活。
  • 但如果是规整的表格数据,需要做过滤、统计、聚合这类批量操作,DataFrame的性能和便捷性甩字典几条街——毕竟Pandas和PyArrow对列存数据的向量化优化,纯Python字典根本比不了。

三种Parquet读取方案的实际表现

1. PyArrow

  • 直接读成pyarrow.Table是最省内存的选择,因为Arrow的列存格式和Parquet天生匹配,不需要额外转换。如果要转字典,别先转DataFrame,直接用table.to_pylist()或者table.to_dict('records')就能拿到字典列表,不会出现内存翻倍的问题——转DataFrame才可能因为Pandas的内存模型(比如对象类型列)增加开销,直接转字典反而更高效。
  • 至于pyarrow.DictionaryArray,这是针对低基数列的字典编码优化,属于列存层面的高效存储,转成字典列表时会自动解码,不用纠结内存浪费。

2. Pandas pd.read_parquet

  • 读出来直接是DataFrame,如果你的核心需求是数据处理,这一步完全没必要绕去字典——DataFrame的向量化操作比遍历字典快N倍,而且用engine='pyarrow'参数的话,还会复用Arrow的列存内存,比默认引擎更省内存。
  • 真要转字典的话,df.to_dict('records')就能生成每行对应的字典列表,Pandas内部做了批量优化,比手动合并小字典高效得多。

3. parquet-python(纯Python实现)

  • 这种方式真心不推荐:纯Python解析Parquet速度慢得离谱,而且每行生成小字典再合并,会产生大量临时对象,内存碎片化严重,速度和内存效率都远不如前两种。除非你身处极端环境(比如没法装带C扩展的PyArrow或Pandas),否则别碰。

最后给个明确方向

  1. 优先看核心操作:表格分析就直接用PyArrow/Pandas读成DataFrame;必须用字典的话,用PyArrow读Table后直接转字典列表,跳过DataFrame环节。
  2. 彻底放弃parquet-python,性价比极低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:05:42