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

如何使用Polars流式读取Parquet文件并将内容以CSV格式输出到标准输出?

如何使用Polars流式读取Parquet文件并将内容以CSV格式输出到标准输出?

这个问题我之前也踩过类似的坑——Polars的LazyFrame.sink_csv确实有点“认死理”,它只接受文件路径字符串(或路径对象)作为参数,不支持直接传入sys.stdout这类打开的文件句柄,不过好在类Unix系统有个超实用的小技巧,既能解决报错,又完全符合你流式处理大文件的需求!

快速修复代码(Linux/macOS适用)

直接把特殊设备文件路径/dev/stdout传给sink_csv就行,系统会自动把写入这个路径的内容转发到标准输出:

import polars as pl
pl.scan_parquet("BTCUSDT-trades-2022-01.parquet").sink_csv("/dev/stdout")

运行这个代码,你就能看到Parquet文件的内容被流式转换成CSV,直接输出到终端(或其他接收标准输出的管道)了。

为什么原来的代码会报错?

你碰到的TypeError本质是Polars内部的路径处理逻辑导致的:
sink_csv会调用normalize_filepath函数对传入的路径做预处理(比如扩展用户目录、解析相对路径),这个函数依赖os.path.expanduser,而后者只接受字符串、字节或路径类对象,不接受TextIOWrapper类型的sys.stdout,所以才会抛出“expected str, bytes or os.PathLike object, not TextIOWrapper”的错误。

用/dev/stdout这个字符串路径就完美绕开了这个问题——Polars会把它当成普通文件路径处理,而系统底层会把这个特殊路径映射到标准输出流,最终实现你要的效果。

关于流式处理的验证

完全不用担心内存问题!因为你用的是pl.scan_parquet生成的LazyFrame(懒加载框架),sink_csv会逐批读取Parquet文件的内容、转换为CSV后写入,全程不会把整个大文件加载到内存里,正好适配你处理多份超大Parquet文件的场景。

Windows系统替代方案(可选)

如果是在Windows环境下,可以用特殊设备名CON替代/dev/stdout:

import polars as pl
pl.scan_parquet("BTCUSDT-trades-2022-01.parquet").sink_csv("CON")

备注:内容来源于stack exchange,提问作者Derek Mahar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:47:59