Python reduce 改为 chain ,性能优化

news/2025/12/9 17:42:32/文章来源:https://www.cnblogs.com/xiaoma2018/p/19327693

Python reduce 改为 chain ,性能优化

本文为和AI大模型KIMI的对话记录,仅供参考。

起因为执行Python代码时reduce才做耗费太多时间和内存,改为chain操作后加速效果明显,本质上属于列表该为迭代器。

Python reduce的性能问题

User: labels_all = reduce(lambda x, y: x + y, df['labels'].to_list(), [])
label_samples_cnt = Counter(labels_all)

这两行Python代码中如果数据量太大会造成内存占用和时间消耗吧?怎么改进?

Kimi: 是的,这两行代码在数据量很大时确实可能成为性能瓶颈,原因如下:


🔍 问题分析

labels_all = reduce(lambda x, y: x + y, df['labels'].to_list(), [])
  • 内存消耗大df['labels'].to_list() 会把整个列加载成一个 Python 列表,占用大量内存。
  • 时间消耗大reduce(lambda x, y: x + y, ...) 会不断创建新的列表,导致 O(n²) 的时间复杂度(每次拼接都复制前一次的结果)。

✅ 改进方案

✅ 方法 1:使用 itertools.chain(推荐)

from itertools import chain
from collections import Counterlabel_samples_cnt = Counter(chain.from_iterable(df['labels']))
  • 优点
    • 不需要一次性把所有列表加载到内存。
    • 使用生成器,内存占用低
    • 时间复杂度接近 O(n)

✅ 方法 2:使用 explode(Pandas 原生)

label_samples_cnt = df['labels'].explode().value_counts()
  • 优点
    • 简洁,Pandas 原生支持。
    • 性能也不错,适合中等规模数据。
  • 注意
    • explode 会生成一个中间 Series,内存占用比 chain,但比 reduce 好太多。

✅ 总结建议

方法 内存效率 时间效率 推荐场景
chain ⭐⭐⭐⭐ ⭐⭐⭐⭐ 大数据量,最优选
explode ⭐⭐ ⭐⭐⭐ 中小数据量,简洁

✅ 最终推荐代码(大数据量)

from itertools import chain
from collections import Counterlabel_samples_cnt = Counter(chain.from_iterable(df['labels']))

如数据量极大(千万级以上),甚至可以考虑 分批处理Dask 等分布式方案。需要我帮你写分批处理的版本吗?


如果数据量更大怎么办?

User: 如果数据量还是非常大怎么办?

Kimi: 如果数据量已经大到单机内存装不下(例如几十 GB 甚至 TB 级),上面“内存友好”的 itertools.chain 也扛不住,因为整列仍然要先读进内存。此时必须升级为外存/分布式方案。下面给出三条可行路线,按“从易到难”排序,你可以根据公司基础设施和自己时间成本选择。


  1. 单机外存:逐行流式 + 磁盘级 Counter
    (无需集群,10~100 GB 级最划算)

思路:

  • 不一次性把列读成 list,而是用 pandas 的 chunk 迭代器 一条一条刷过去;
  • collections.Counter原地加法 增量聚合;
  • 只保留最终计数表在内存,数据本身不落内存。

代码模板(可直接跑)

from collections import Counter
import pandas as pdlabel_cnt = Counter()
chunksize = 500_000          # 按行数调,保证每块内存 < 1 GB 即可
for chunk in pd.read_csv('big_file.csv',      # 或 read_parquetusecols=['labels'],  # 只读需要的列chunksize=chunksize,converters={'labels': pd.eval}):  # 如果存的是字符串 listfor row in chunk['labels']:label_cnt.update(row)print(label_cnt)
  • 内存峰值 ≈ 一块 chunk + Counter 大小,远低于总行数
  • 纯 Python,无额外依赖,最快 30 min 可上线

  1. 单机并行:Dask DataFrame(百 GB~TB 级,零集群)

思路:

  • 把大文件切成很多块,Dask 自动多线程/多进程并行;
  • 每块内部 explode → value_counts(),再全局聚合;
  • 代码几乎和 pandas 一样,但省内存、自动并行。

安装

pip install "dask[complete]"

代码

import dask.dataframe as dddf = dd.read_parquet('big_file.parquet', columns=['labels'])  # or read_csv
out = df.labels.explode().value_counts().compute()            # 返回 pandas Series
print(out)
  • 无需自己写 chunk 循环;
  • 如果机器有 16+ 核、NVMe,1 TB 数据 10~30 min 跑完
  • 失败节点自动重试,比手写多进程稳。

  1. 分布式:PySpark / Spark SQL(TB 级以上,公司有 Yarn/K8s)

思路:

  • 数据已落在 HDFS/S3,直接 Spark SQL 一行搞定;
  • Spark 自动在成百上千台机器上做 explode + count;
  • 内存/磁盘溢写全自动,理论上无上限

PySpark 代码

from pyspark.sql import SparkSession
from pyspark.sql.functions import explode, colspark = SparkSession.builder.appName("label_cnt").getOrCreate()
df = spark.read.parquet("hdfs:///path/big_file.parquet")
out = (df.withColumn("label", explode(col("labels"))).groupBy("label").count().orderBy("count", ascending=False).collect())   # 或者 .write.parquet(...) 落盘
for row in out:print(row.label, row['count'])
  • 只要集群够大,PB 级也能跑
  • 缺点:需要 Spark 环境,调试周期比 Dask 长。

怎么选?

数据规模 硬件环境 推荐方案 预估耗时
1~50 GB 单机 16 GB 内存 方案 1(chunk 流式) 5~20 min
50 GB~1 TB 单机 32~128 GB 核多 方案 2(Dask) 10~30 min
1 TB 以上 公司 Spark 集群 方案 3(PySpark) 横向扩展

小结一句话
“数据再大,只要不把整列一次性塞进内存,就能跑。”
先上方案 1(零依赖),如果单机 CPU 吃满还不够,再平滑迁到 Dask 或 Spark。需要我帮你把方案 1 改成多进程加速版吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/995285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年PPH法兰球阀订制厂家权威推荐榜单:PPH阀门‌/PPH球阀‌/PPH法兰隔膜阀源头厂家精选

在化工、电镀、污水处理等强腐蚀性介质输送领域,PPH(均聚聚丙烯)材质因其卓越的耐化学腐蚀性能和相对经济的成本,已成为替代传统金属阀门的重要选择。PPH法兰球阀作为此类系统中的核心启闭与控制部件,其性能的可靠…

可对话的赛博分身:用 Claude Code 分析 GitHub 日记

可对话的赛博分身:用 Claude Code 分析 GitHub 日记 前言 在这个数字时代,我希望拥有一个能够记录、分析我的行为模式的智能助手。经过尝试,我构建了一个免费开放的日记系统——它不仅能记录我的日常,还能通过 AI …

VMware NSX 身份防火墙 - 基于终端用户的安全策略

NSX 身份防火墙是什么? NSX 的身份防火墙(Identity Firewall, IDFW)是一种基于用户身份的分布式防火墙功能,它能识别 Active Directory 用户或用户组,并据此动态应用安全策略(将身份映射到IP),而不仅仅依赖 IP…

公众号排版不用愁!酷宣 AI 保姆级攻略,新手也能秒变专业小编

做公众号最费时间的不是写稿,是排版啊家人们!手动调格式半天同步全乱、找配图怕侵权、学复杂编辑器没耐心… 试过 N 种方法后,发现酷宣 AI 能解决 90% 排版痛点,今天把全套干货分享给大家,看完直接上手,不用再查…

2025 年 12 月炉温监控设备厂家权威推荐榜:波峰焊炉温/残氧量/氮气控制/真空测温仪,精准工艺与智能监控技术深度解析

2025 年 12 月炉温监控设备厂家权威推荐榜:波峰焊炉温/残氧量/氮气控制/真空测温仪,精准工艺与智能监控技术深度解析 在现代精密电子制造、半导体封装及汽车电子等领域,焊接与热处理工艺的质量直接决定了最终产品的…

正则表达式的\w+是什么意思?

正则表达式的\w+是什么意思?本文为和AI大模型KIMI的对话记录,仅供参考。User: re.split(rlabel\w+, text) 这段Python的正则表达式是什么意思? Kimi: re.split(r__label__\w+, text) 这段Python代码使用了正则表达式…

2025年进口电动蒸汽截止阀制造企业权威推荐榜单:进口气动蒸汽球阀‌/进口蒸汽截止阀‌/进口自力式蒸汽调节阀源头厂家精选

在全球高端工业流程与建筑能源系统中,蒸汽作为一种高效的能量载体,其精确、可靠的输送与控制至关重要。进口电动蒸汽截止阀作为蒸汽管线上实现自动启闭、精确调节与安全隔离的核心执行单元,其性能直接关系到系统的运…

面向2025:构建三成像绘无人机集群软硬一体化核心能力厂商推荐

引言:智能化集群时代,定义战场感知新维度随着无人化、智能化战争形态的加速演进,无人机已从单平台侦察工具,向集群化、多功能、自主协同的系统级能力跨越。传统的单机作业与事后处理模式,难以满足现代行动对实时态…

2025年市面上可靠的投影机出租公司哪家强,50000流明投影机/水幕投影机出租/激光投影机出租/投影机出租工厂排行榜

随着展览展示、大型演出及高端会议活动的日益专业化与视觉化,高品质投影设备的租赁需求持续攀升。面对市场上众多的服务商,活动主办方如何选择一家设备可靠、服务专业、响应及时的合作伙伴,成为确保活动成功的关键一…

2025选购必看:武汉红砖厂家综合实力与口碑排行,排行前列的红砖赋能企业生产效率提升与成本优化

在武汉这座日新月异的现代化大都市,从大型商业综合体到温馨的家庭住宅,红砖作为基础且重要的建筑材料,其质量与供应稳定性直接影响着工程的进度与最终品质。面对市场上众多的红砖生产与供应商,如何选择一家兼具实力…

2025年市面上专业的投影机销售厂家推荐,激光投影仪/W40投影机出租/34000流明投影机/投影机源头厂家排名

随着数字展示、沉浸式体验及高端会议需求的持续增长,专业投影设备市场呈现出蓬勃发展的态势。对于活动主办方、策展机构及企业而言,选择一家技术过硬、服务可靠的专业投影机供应商,已成为确保活动视听效果与执行顺畅…

重练算法(代码随想录版) day35 - 动态规划part3

今日刷题量:2 当前刷题总量:136 Easy: 59 Mid: 70 Hard: 7 Day35 常用思想 01背包问题的思想 1.01背包问题的特征:有没有一堆“物品”:n 个元素 / 数字 / 物品。 每个东西只能用 0 或 1 次(选 or 不选)。 有一个…

2025年市面上有实力的投影机品牌哪家权威,20000流明投影机/雾幕投影机/30000流明投影机厂家哪家好

随着数字展示与沉浸式体验需求的激增,投影机市场正经历从硬件销售向一体化解决方案服务的深刻转型。对于展览、演出、高端会议等活动主办方而言,选择一家技术过硬、服务可靠的专业投影机供应商,已成为活动成功的关键…

一文读懂!蓝蜂 MQTT 边缘计算网关核心功能,解软件服务商与工程方难题​

软件服务商愁 “下位机数据难整合、平台接入成本高”,项目工程实施方烦 “现场对接慢、运维跑断腿”—— 看似不同的痛点,实则都能通过蓝蜂物联网 MQTT 边缘计算网关的核心功能逐一破解。这台网关不是简单的 “联网工…

深入理解 C++ 类型转换:从 C 语言兼容到 C++ 增强特性 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 天线厂家 TOP10 推荐:科普选型指南,靠谱品牌助力通信升级

随着 5G-A 技术加速落地,车联网、物联网、低空经济等领域迎来爆发式增长,天线作为信号传输的 “核心枢纽”,其性能直接决定通信质量的优劣。从基站广域覆盖到车载精准连接,从智能家居联网到户外无线组网,优质天线…

2025年四川小程序开发方案权威推荐榜单:小程序平台/小程序定制/商城小程序方案服务商精选

随着移动互联网的深入发展,微信小程序已成为企业连接用户、提升运营效率、实现品牌数字化转型的标准配置和关键入口。在四川,尤其是成都这一西部数字经济的核心区域,企业对小程序的需求正从“基础功能实现”向 “深…

2025年四川小程序开发方案权威推荐榜单:小程序平台/小程序定制/商城小程序方案服务商精选

随着移动互联网的深入发展,微信小程序已成为企业连接用户、提升运营效率、实现品牌数字化转型的标准配置和关键入口。在四川,尤其是成都这一西部数字经济的核心区域,企业对小程序的需求正从“基础功能实现”向 “深…

dell装机前识别硬盘设置

一. 装机前识别硬盘 1.开机按F2进入bios设置 2.进入设备设置 3. 进入raid设置 4.进入硬件组件设置 5.点击Make lnconfiqured Good 后跳转新页面 点击 go 6.点击Cryptoqraphic Erase 7.保存,重启识别到了二.重置…

【高录用 | 稳检索 】第三届教育发展与社会科学 国际学术会议 (EDSS 2026)

【高录用 | 稳检索 】 第三届教育发展与社会科学国际学术会议 (EDSS 2026) The 3rd International Conference on Educational Development and Social Sciences 可接受纯综述&实证文章-教育、管理、社会科学等主题…