底层、推理、联想思维之应用(使用map reduce实现大规模kmeans聚类)
之前小组的同事说了一道题目怎么高效的使用map-reduce完成kmeans聚类。我想了一些时间想出了最高效最简洁的完成方法。本篇文章我想把我的思路阐述清楚更为关键的是我想说清楚我是怎么运用底层思维、推理思维及联想思维想到最终方案的。第一步因为涉及到kmeans聚类我首先要做的是复习熟悉kmeans聚类算法。在这个过程中我了解到kmeans算法的迭代过程是这样的。a.先随机选取(或者更有策略地选取因为不是本篇文章的重点所以我们就采用随机选取吧)K个质心。b.对每条数据分别计算其距离K个质心的距离然后把距离最近的那个质心当做它的类别。c.因为b使得每条数据产出了它的类别在这里将每个类别的数据聚合在一起计算新的质心。d.不断迭代b和c直到终止条件。在这里我们使用的终止条件是所有数据距离他们所属质心的距离加和改变幅度在一个比较小的数值。第二步了解map reduce的各个细节。比如map task内部的细节、reduce task的细节shuffle阶段干了什么combiner阶段干了什么多路输出是什么。第三步了解了kmeans聚类算法和map reduce的各个细节。我们现在构思怎么使用我们手里拿到的砖块实现一栋楼房。首先对于第一步中的a和b我们可以想到在map task中加载质心文件然后对map task中的每个数据计算其距离K个质心的距离输出其类别是可以做到的。其次我们考虑如何实现c(注意为了不让大脑思考的东西一下子过于复杂我对算法的实现进行了细分也就是说在思考方案的时候我们每次只在大脑里考虑实现方案的一部分而不是想着一下子把整个算法完美无缺的实现出来一开始太过追求完美会让你的大脑沉迷于各种琐碎的细节中而失去了宏观的把控和思考你应该先从宏观进行把控然后再完善细节。我管这个过程叫做宏观思考任务拆解和细分、不完美后续迭代优化)。在首先中我们需要输出每个数据所对应的类别那么一下子可以想到的是把类别做为key然后同类别的数据会进入到同一个reduce里面然后在reduce里面计算每个key(类别)的新质心。这个思路是最直观也是最容易想到的。但是其有一个很坏的缺点。就是当你的k很小的时候比如3这个时候大量的数据会shuffle到3个reduce里面。你的reduce很可能会爆炸(k很小导致实际被使用的reduce也很少即便你的reduce num设置得很大)。那么还有没有更好的解决方案可以避免大量的数据shuffle到reduce中去呢注意这些数据的格式是数据类别_数据这样的格式的。这就涉及到对map reduce各个模块和细节的熟悉程度了。然后我们就赶快想啊我们把上述格式的数据shuffle到reduce中是为了计算新的质心而我们还不想让这些数据进行shuffle那么在map端可否进行新质心的计算呢或者是完成一部分的新质心计算工作呢我们联想到combiner正是在map端的reduce我们想到在map端combiner出现在两个地方一个地方是sortcombiner以让内存缓冲区中的数据先排序然后combiner以减小写入磁盘数据的大小。另外一个地方是merge过程在这个过程中多个spill文件会归并成一个大文件combiner会缩小数据规模以减小shuffle数据的大小。而在combiner过程中我们可以计算同类别数据他们的加和(这里我们把每条数据的形式当做一个向量这里的加和指的是向量求和)只要我们把有多少同类别数据进行加和也保留下来我们就能得到每个map task同类别数据他们的加和以及有多少同类别数据进行加和那么我们的方案就来了。在map端对同类别数据进行combine输出 类别 \t 同类别数据加和 \t 同类别数据的数目。然后这部分数据是很小的完全可以shuffle到reduce中去而每个数据所属类别这样的信息我们也要输出。对于我们来说要计算新质心前面的信息已经足够了后面的信息完全没有必要shuffle到reduce中去。所以我们的技术方案是每个数据及其类别信息就地输出(map端输出)而类别 \t 同类别数据加和 \t 同类别数据的数目这样的信息shuffle到reduce中以计算新的质心。然而然而map reduce框架并不支持这样的玩法(map的输出有一部分输出在map端就地输出有一部分shuffle到reduce)。那么退而求其次考虑到我们在这里需要reduce处理的数据已经很小了那么reduce完成的功能我们完全可以使用hadoop fs -get 把质心信息弄到本地再在本地进行计算。所以最终的方案是不使用reduce只使用map。在map端使用多路输出一路输出是每个map task输出的质心信息一路输出是每条数据所属的类别信息。第四步现在我们考虑终止条件怎么计算。实际上当完成第三步以后这个计算的构思就变得简单了。我们可以在第二步的时候计算每条数据距离它所属质心的距离然后在第三步的combiner中合并同类别数据距离质心之和。在map端同样输出到另外一路在之后我们只需要使用hadoop fs -get然后离线就可以计算得到终止条件所要求的那个数值。

相关新闻

全栈开发者效率提升的十个反直觉认知:慢下来才能快起来的工程真理

全栈开发者效率提升的十个反直觉认知:慢下来才能快起来的工程真理

全栈开发者效率提升的十个反直觉认知:慢下来才能快起来的工程真理 一、"效率悖论":为什么追求效率反而降低效率 全栈开发者的效率焦虑在 2026 上半年达到了一个新高度。AI 代码生成工具让"写代码"的速度提升了 3-5 倍,但…

2026/7/28 15:40:39 阅读更多 →
Linux中iptables设置详细

Linux中iptables设置详细

无论如何,iptables是一个需要特别谨慎设置的东西,万一服务器不在你身边,而你贸然设置导致无法SSH,那就等着被老板骂吧,呵呵。。。1.首先介绍一下指令和相关配置文件 启动指令:service iptables start 重启指令:serv…

2026/7/28 15:40:39 阅读更多 →
高等数学笔记 C8-9

高等数学笔记 C8-9

八、线性代数 - 向量向量:n个独立的对象,线性。向量a-> xiyjzk有方向,有长度,叫做矢量。区别于标量。维数相同的才能加减法,平行四边形法则。向量的数量积(内积、点积),变成了一…

2026/7/28 15:40:39 阅读更多 →

最新新闻

基于FastAPI搭建PDF翻译微服务:从架构到部署(附完整代码)

基于FastAPI搭建PDF翻译微服务:从架构到部署(附完整代码)

前言 最近在做一个企业内部文档中台项目,需要把PDF翻译能力封装成微服务,供前端、IM机器人、定时任务等多个消费者调用。调研了一圈,发现市面上的方案要么太重(直接部署商业软件),要么太轻(纯脚…

2026/7/28 15:47:41 阅读更多 →
pycharm连接mysql时报错

pycharm连接mysql时报错

#在URL后加上: ?serverTimezoneUTC&characterEncodingutf-8

2026/7/28 15:47:41 阅读更多 →
数据通信基础(一)

数据通信基础(一)

数据通信基础(一) 1.数据通信基本概念 2.数据通信计算 3.通信传输介质 4.数据调制与编码 1.数据通信基本概念 考点1: 信源:信号的产生物(发送端) 信道:通信的通道,是信号传输的媒介 信宿:信号的接收(接收端) 数字信号:是以某一瞬间的状态表示它们传送的消息,…

2026/7/28 15:47:41 阅读更多 →
2026年大模型选型指南:不聊跑分,只讲场景和落地无标题】

2026年大模型选型指南:不聊跑分,只讲场景和落地无标题】

今年的模型格外火,模型跑分各种评论一堆一堆,真要选的时候还是不知道怎么定。 换模型改代码这个事,干过的都懂——改地址、改参数、改返回解析,一折腾就是半天,还得重新测一遍。 这篇不是测评报告,也不是源…

2026/7/28 15:47:41 阅读更多 →
免费开源QQ空间历史说说备份工具:GetQzonehistory完整指南

免费开源QQ空间历史说说备份工具:GetQzonehistory完整指南

免费开源QQ空间历史说说备份工具:GetQzonehistory完整指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字时代,我们的青春记忆往往散落在各个社交平台&am…

2026/7/28 15:47:41 阅读更多 →
物联网设备低功耗优化:从6个月到3年的电池寿命提升

物联网设备低功耗优化:从6个月到3年的电池寿命提升

1. 项目背景与核心挑战在物联网设备和便携式电子设备中,不可充电的初级电池(如纽扣电池、AA/AAA电池)是最常见的供电方案。这类电池一旦耗尽就必须更换,而在某些部署场景中(如远程传感器、植入式医疗设备)&…

2026/7/28 15:46:41 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻