600万行爆内存?Pandas分块、Dask并行与Polars选型实录
📅 2026/7/4 19:41:14
👁️ 次浏览
600万行爆内存Pandas分块、Dask并行与Polars选型实录接了一个这样需求清洗600多万条社交媒体帖子。源数据是API拉下来的JSON展平后两百多列看着挺整齐结果脚本一跑直接OOM。盯着报错日志发了一会儿呆。以前总想着“加机器”就能解决现在云账单压着预算没那么宽裕。这600万行数据展开大概30G普通Worker根本吃不下。我没急着换库先试了最笨的办法后面又折腾了Dask和Polars。把这几种方案的优缺点和坑记下来。正文先拿Pandas分块硬扛最开始想用Pandas处理混合字段觉得比PySpark对Schema的一致性要求低一些。数据里有不少“薛定谔的类型”字段比如reaction_count有的行是整数1250有的是字符串1250还有null。importpandasaspddefnormalize_mixed_columns(df,mixed_columns):cleaned_dfdf.copy()forcolumninmixed_columns:cleaned_df[column](cleaned_df[column].where(cleaned_df[column].isna(),cleaned_df[column].astype(str)))returncleaned_df代码简单但一跑就崩。Pandas处理大列时会在内存生成临时对象30G的数据直接撑爆RAM。只能上分块Chunking。把数据切成25万行一块处理完释放一块内存。运行时间长点但稳定不会中途罢工。importgcdefnormalize_mixed_columns_chunked(df,mixed_columns,chunk_size250000):cleaned_dfdf.copy()forcolumninmixed_columns:col_idxcleaned_df.columns.get_loc(column)forstartinrange(0,len(cleaned_df),chunk_size):endmin(startchunk_size,len(cleaned_df))# 截取当前块chunkcleaned_df.iloc[start:end,col_idx]maskchunk.notna()ifmask.any():chunkchunk.astype(object)chunk.loc[mask]chunk.loc[mask].astype(str).values cleaned_df.iloc[start:end,col_idx]chunk.values# 手动清理内存delchunkdelmask gc.collect()returncleaned_df这写法很繁琐而且只用了单核CPU。云端多核环境这么搞纯属浪费资源。Dask自动并行但容易踩类型坑单核太慢就上Dask。它能自动切分DataFrame在多核上并行执行理论上能省不少时间。但Dask有个隐形炸弹元数据推断。读CSV或JSON时Dask会采样一部分数据推断类型。如果前几行是整数它就标记为Integer。后续遇到字符串Dask就会报错ValueError或TypeError因为它认为类型不一致。解决办法粗暴点显式指定类型转换别依赖自动推断。importdask.dataframeasdd dfdd.read_parquet(social_posts.parquet,enginepyarrow)mixed_columns[hashtags,mentions,location,reaction_count]# 必须显式指定meta否则容易炸forcolumninmixed_columns:df[column]df[column].map(str,meta(column,str))df.to_parquet(social_posts_clean/,enginepyarrow)Dask解决了并行问题但处理动态混合类型列时代码复杂度反而高了。如果底层还是大量Python对象操作内存压力并没根本缓解。Polars真香定律同事推荐了Polars。基于Rust引擎号称比Pandas快几个数量级内存占用极低。Polars用Apache Arrow的列式存储格式支持Lazy Evaluation延迟执行。它会在真正读取数据前优化查询计划只加载必要的数据流。importpolarsaspl dfpl.read_parquet(social_posts.parquet)mixed_columns[hashtags,mentions,location,reaction_count]# 一行代码搞定类型转换底层Rust执行dfdf.with_columns([pl.col(col).cast(pl.String)forcolinmixed_columns])df.write_parquet(social_posts_clean.parquet)跑了一下内存峰值几乎没动速度快得离谱。不过Polars也不是银弹。API跟Pandas不一样常用的apply、groupby语法得重写。如果团队都只认Pandas引入Polars意味着要维护两套逻辑或者频繁做格式转换这也是成本。数据菌说没有最好的方案只有适合当下约束的方案。资源极度受限且数据模式动态变化Pandas分块虽然慢但可能是唯一的选择。集群有多核资源能接受显式定义SchemaDask是个平衡点。追求极致性能愿意学新APIPolars确实能带来质变。选型前先算笔账这笔成本是算在计算资源上还是人力维护上我踩过的坑有一次用Dask处理含空值的JSON没指定meta参数。前10%数据正常跑到第15%时报TypeError: casting string to int。排查半天发现某条脏数据混入了特殊字符导致Dask采样推断错误。后来强制指定所有混合列为String类型才解决。半结构化数据的类型推断永远不可靠显式声明保平安。落地清单检查当前ETL任务的内存峰值确认是否真的超出单机限制若用Pandas务必加入gc.collect()并设置合理的chunk_size如25w若用Dask读取非Parquet文件时显式传入dtype或meta避免推断错误评估团队对Polars的学习成本小规模实验后再决定是否全量迁移参考来源What Can We Do When Memory Becomes the New Bottleneck in Data Engineering?— Towards Data Science原文链接https://towardsdatascience.com/when-memory-becomes-the-new-bottleneck-in-data-engineering-what-can-we-do/Dask Documentation延伸阅读Polars Documentation延伸阅读Python Cookbook延伸阅读
前沿技术介绍:AI智能体视觉(TVA,Transformer-based Vision Agent)是依托Transformer架构与“因式智能体”理论所构建的颠覆性工业视觉技术,属于“物理AI” 领域的一种全新技术形态,完成了从“虚拟世界”到“…
📅 2026/7/4 19:41:14
04 Codex 订阅与计费:先分清“人用”和“程序用”适合读者:已经能启动 Codex,但不确定该用 ChatGPT 套餐、API key,还是先观望的人。
本文目标:帮你理解 Codex 成本从哪里来,怎么选择付费方式,…
📅 2026/7/4 19:39:14
一句话:AI输出质量不稳定,不能直接用。写了一个脚本让AI输出后先自检再交给你——4项检查(格式/逻辑/来源/行动项),每次从15分钟压到2-3分钟。附完整Python源码。📌 "一人公司AI内容生产系统"系列…
📅 2026/7/4 19:39:14
从IBIS宏模型精度不足,到SI/PI协同仿真误差累积、BER Signoff方法论分歧,再到工具碎片化拖慢流程——本文梳理DDR5/HBM3时代信号完整性仿真面临的四个核心难点。2003年,DDR1的数据速率是400 Mbps。2025年前后,DDR5最新规格突破800…
📅 2026/7/4 20:45:25
Docker Compose 本地环境搭建:.env 统一配置模板🔗 前言:Docker Compose 本地环境搭建相关文章🐳 Docker Compose 本地环境搭建:.env 统一配置模板📚 目录结构设计📄 .env🚀 验证 en…
📅 2026/7/4 20:45:25
Windows任务栏美化终极指南:5种透明效果让你的桌面焕然一新 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB
你是否厌倦了Wind…
📅 2026/7/4 20:45:25
MapLibre开源地图生态完全指南:从零构建专业级地图应用 【免费下载链接】awesome-maplibre A collection of awesome things that use or support MapLibre! 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-maplibre
还在为商业地图服务的高昂费用而烦…
📅 2026/7/4 20:45:25
🔥 AI Agent 面试题 711:Agent的Prompt注入防御的实时监控和告警摘要:本文深入解析了「Agent的Prompt注入防御的实时监控和告警」这一 AI Agent 领域的核心面试题。文章从 Prompt 注入攻击与防御 的基本概念出发,系统性地剖析了 实…
📅 2026/7/4 20:45:25
确保汽车系统的安全性并非易事。随着现代车辆日益复杂,识别并减轻潜在危险变得比以往任何时候都更加关键。这正是危害分析与风险评估(HARA)发挥作用的地方。 HARA是一种结构化方法,旨在评估风险并制定符合ISO 26262(汽…
📅 2026/7/4 20:43:25
Axure RP中文界面终极解决方案:3分钟告别英文困扰 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn
还在为Axure RP的英…
📅 2026/7/4 0:00:50
1. MC6470与STM32F745VG的黄金组合解析在工业自动化和机器人控制领域,传感器与微控制器的协同工作能力直接决定了系统的响应速度和定位精度。MC6470作为一款6自由度惯性测量单元(6DOF IMU),与STM32F745VG这款基于ARM Cortex-M7内核的高性能微控制器组合&…
📅 2026/7/4 0:00:50
1. 项目概述:为什么要在本地跑 SAM Audio?这不只是“能用”,而是“必须用”SAM Audio——全称是 Segment Anything Model for Audio,不是 Meta 那个视觉领域的 SAM(Segment Anything Model)的简单移植&…
📅 2026/7/4 0:00:50
6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…
📅 2026/7/2 17:37:53
引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…
📅 2026/7/2 17:37:51
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/4 5:07:51
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/4 5:10:18
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/4 17:36:47