0

0

Polars 中高效逐行生成 DataFrame 并批量落盘的完整实践指南

心靈之曲

心靈之曲

发布时间:2026-02-06 18:26:23

|

743人浏览过

|

来源于php中文网

原创

Polars 中高效逐行生成 DataFrame 并批量落盘的完整实践指南

本文介绍在 polars 中处理流式逐行数据生成场景的最佳实践,重点对比列表累积、vstack 拼接等传统方式,推荐使用 lazyframe + `sink_csv` 的流式写入方案,并提供可直接复用的向量化批处理与自定义分解函数集成方法。

在实时数据采集、日志解析或模型推理等场景中,常需从生成器(generator)逐行获取原始数据,并经 decompose() 等逻辑提取结构化特征后,持续写入磁盘。此时若采用“每行建 DataFrame → vstack 拼接”或“Python 列表累积 → 定期转 DataFrame”,不仅内存开销大、性能差,还违背 Polars 的列式计算设计哲学。

最优解:LazyFrame 流式构建 + sink_csv 批量落盘
Polars 原生支持从可迭代对象(如生成器)直接构建 LazyFrame,并可通过 .sink_csv() 实现真正的流式、分块(batched)磁盘写入——无需将全部数据载入内存,且自动优化 I/O 与类型推断:

import polars as pl

def generation_mechanism():
    for x in range(1_000_000):
        yield (x, x + 1)

# 直接从生成器构建 LazyFrame(零拷贝、惰性求值)
lf = pl.LazyFrame(generation_mechanism(), schema=["feature_a", "feature_b"])

# 流式写入 CSV,每 100 行刷盘一次(batch_size 控制内存峰值)
lf.sink_csv("output.csv", batch_size=100)

该方案优势显著:

  • ✅ 内存恒定:仅缓存一个 batch(如 100 行)于内存;
  • ✅ 零中间 DataFrame:避免 vstack 的重复内存分配与列对齐开销;
  • ✅ 类型安全:schema 参数显式声明列类型,规避运行时推断错误;
  • ✅ 可扩展:后续可无缝接入 .filter()、.with_columns() 等链式转换。

? 当 decompose() 逻辑复杂时:用 map_batches 向量化封装
若 decompose(row) 不是简单解包(如需调用外部 API、条件分支或状态依赖),可将其封装为 map_batches 的批处理函数。注意:务必设置 streamable=True 以启用流式执行:

def decompose(row):
    # 示例:对元组做非向量化变换(实际中应尽量向量化)
    a, b = row
    return a * 2, b ** 2

lf = (
    pl.LazyFrame({"raw": generation_mechanism()})
    .map_batches(
        lambda df: df.select(
            pl.col("raw").map_elements(
                decompose,
                return_dtype=pl.Struct({"feature_a": pl.Int64, "feature_b": pl.Int64})
            )
        ),
        streamable=True
    )
    .select(pl.col("raw").struct.unnest())  # 展开 struct 为独立列
)

lf.sink_csv("output.csv", batch_size=100)

⚠️ 不推荐的方案及原因

10Web
10Web

AI驱动的WordPress网站自动构建器,托管和页面速度助推器

下载
  • ❌ vstack 循环拼接:每次 vstack 触发深拷贝与内存重分配,时间复杂度 O(n²),10 万行即明显卡顿;
  • ❌ Python 列表累积:虽比 vstack 快,但仍需一次性构造全量 DataFrame,丧失流式优势,且类型推断不可控;
  • ❌ itertools.batched + map_elements:适用于轻量级批处理,但 map_elements 默认非向量化(Python 回调开销大),仅作备选。

? 关键建议

  1. 优先向量化 decompose:改用 Polars 表达式(如 pl.col().str.extract()、pl.when().then())替代 Python 函数;
  2. 显式声明 schema:避免隐式类型推断导致的精度丢失(如 float→int 截断);
  3. 监控 batch_size:根据单行内存占用(pl.datatypes.* 查看)设为 50–1000 行,平衡 I/O 效率与内存占用;
  4. 生产环境加异常防护:sink_csv 支持 include_header=True(首行写列名),并建议配合 try/except 处理写入失败。

综上,Polars 的 LazyFrame + sink_* 系列 API 是处理流式数据生成任务的官方推荐、性能最优、内存最省的范式。放弃“模拟 Pandas 式循环构建”,拥抱惰性计算与流式落盘,方能真正释放 Polars 的高性能潜力。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

73

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

3

2026.01.31

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

581

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

104

2025.10.23

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

605

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

550

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

173

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

204

2025.08.29

1688阿里巴巴货源平台入口与批发采购指南
1688阿里巴巴货源平台入口与批发采购指南

本专题整理了1688阿里巴巴批发进货平台的最新入口地址与在线采购指南,帮助用户快速找到官方网站入口,了解如何进行批发采购、货源选择以及厂家直销等功能,提升采购效率与平台使用体验。

74

2026.02.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号