Python读取超大文件仅指定行的最高效文件类型选型
适合该场景的最优文件方案
你的核心需求是低内存占用下的高频按行号随机读取,无压缩率要求,存储资源充足,综合下来最优选择分两种情况:
无需动态裁剪读取列(每次读行需取该行全部数百列)
- 优先选 Apache Avro 格式:
- 属于行式存储格式,单行的所有字段数据在磁盘上连续存储,只要提前构建一次行号到文件偏移量的索引,后续每次读指定行只需按偏移量读取单行数据即可,单次读取操作的I/O开销、内存开销均为最低水平
- 可完全关闭压缩,进一步降低读取时的解压内存占用和CPU开销,完全匹配你不关注压缩率的要求
- 单条读取延迟比列存格式低1~2个数量级,完美适配数百万次随机行读的高频操作场景
需要动态裁剪读取列(每次读行仅需取数百列中的少数几列)
- 优先选 切分超细行组的Parquet格式:
- 将默认的100万行/行组调整为100~1000行/行组,同时提前构建行号到行组的映射索引
- 每次读指定行时,仅需加载对应极小行组的指定列数据,内存占用可控制在KB级,完全规避全量加载的问题
- 相比直接使用原生大行组Parquet,随机读开销可降低90%以上
不推荐方案
- 不要使用CSV、JSON等文本格式:解析开销极高,随机读需要扫描文件至目标行,完全不适合高频操作
- 不要使用原生未调整配置的ORC、大行组Parquet:大行组下随机读需要加载整个行组的对应列数据,内存开销和I/O开销都不符合要求
内容的提问来源于stack exchange,提问作者tom davison
相关产品推荐
相关产品推荐

