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

如何用Polars实现单次读取大Parquet文件的多分区发散查询下沉?

解决方案:一次性扫描大文件并按token分区写入

你当前的循环写法会对每个token重复扫描整个大文件,IO开销拉满,性能浪费严重。Polars原生就支持一次扫描、流式处理、分区写入的方案,完全适配你的大文件+LazyFrame场景,不需要把全量数据载入内存。

最优实现代码

import polars as pl

# 以Lazy模式读取大文件(不加载到内存)
data = pl.scan_parquet(big_file_path)

# 如果你只需要处理指定的tokens列表,先过滤出目标数据(可选步骤)
data = data.filter(pl.col("token").is_in(tokens))

# 按token列自动分区写入,全程仅扫描一次文件
data.sink_parquet(
    output_root_path,
    partition_by="token",
    # 可选:根据需求调整写入参数,比如压缩格式、行组大小
    compression="snappy",
    row_group_size=100_000
)

关键说明

  • 这个写法会流式处理大文件的每一行数据,直接将其路由到对应的token=xxx子文件夹下,全程内存占用极低,不会加载全量数据。
  • 生成的目录结构是标准Parquet分区格式(output_root_path/token=xxx/xxx.parquet),后续读取时pl.scan_parquet能自动识别分区,无需额外处理。

如果有特殊需求(比如自定义分区路径格式),可以结合group_by做更灵活的处理,但原生partition_by已经是最高效的方案,优先推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 06:12:34