京公网安备 11010802034615号
经营许可证编号:京B2-20210330
经典的大数据问题
随着信息的高速发展,越来越多的数据信息等待处理,如何快速的从这些海量数据中找到你所需要的数据呢?这就是大数据的处理问题,下面我对几个经典的大数据问题进行分析~~~~
一. 设计算法找到每日访问百度出现次数最多的IP地址?
分析:将所有的IP逐个写入到一个大文件中,因为当IP地址采用点分十进制的方式表示的时候是32位的,所以最多存在2^32个IP。可以采用映射的方式,比如模1000,将这个较大的文件映射为1000个小文件,再将每个小文件加载到内存中找到每个小文件中出现频率最大的IP(可以使用hash_map的思想进行频率统计);然后在这1000个最大的IP中找出那个出现频率最大的IP,就是出现次数最多的IP了。
算法思想如下:(分而治之+hash)
1).IP地址最多有2^32=4G个,所以不能直接将所有的IP地址加载到内存中
2).可以考虑采用”分而治之”的思想,就是将IP地址Hash(IP)%1024值,将海量IP分别存储到1024个小文件中,这样每个小文件最多包含(2^32)/(2^10)=4M个IP地址
3).对于每一个小文件,可以构建一个IP值为key,出现次数为vaue的hash_map,通过value的比较找到每个文件中出现次数最多的那个IP地址
4).经过上述步骤已经得到1024个出现次数最多的IP地址,再选择一定的排序算法找出这1024个IP中出现次数最多的那个IP地址
二.给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件的交集?
分析:我们知道对于整形数据来说,不管是有符号的还是无符号的,总共有2^32=4G个数据(100亿个数据中肯定存在重复的数据),我们可以采用位图的方式来解决,假如我们用一个位来代表一个整形数据,那仫4G个数共占512M内存。我们的做法是将第一个文件里的数据映射到位图中,再拿第二个文件中的数据和第一个文件中的数据做对比,有相同的数据就是存在交集(重复的数据,交集中只会出现一次).
三.假定一个文件有100亿个整形数据,1G内存,如何找到出现次数不超过两次的数字?
分析:要解决这个问题同样需要用到位图的思想,在问题二中已经了解到采用位图的一个位可以判断数据是否存在,那仫找到出现次数不超过两次的数字使用一个位是无法解决的,在这里可以考虑采用两个位的位图来解决.
根据上述分析我们可以借助两个位,来表示数字的存在状态和存在次数,比如:00表示不存在,01表示存在一次,10表示存在两次,11表示存在超过两次;类似问题二的计算过程:如果一个数字占一位,需要512M内存即可,但是如果一个数字占两位,则需要(2^32)/(2^2)=2^30=1G内存;将所有数据映射到位图中查找不是11的所对应的数字就解决上述问题了。
题目扩展:其他条件不变,假如只给定512M内存该如何找到出现次数不超过两次的数字?
分析:将数据分批处理,假若给定的是有符号数,则先解决正数,再解决负数,此时512M正好解决上述问题.
四.给两个文件,分别有100亿个query,我们只有1G内存,如何找到两文件交集?分别给出精确算法和近似算法!
分析:看到字符串首先应该反应过来的就是布隆过滤器,而问题四的近似算法就是采用布隆过滤器的方法,之所以说布隆过滤器是近似的算法,因为它存在一定 的误判(不存在是肯定的,存在是不肯定的);而要想精确判断字符串文件的交集,我们可以采用分而治之的方法:将大文件切分为一个一个的小文件,将一个又一个的小文件拿到内存中做对比,找到对应的交集。
1.布隆过滤器的近似解决办法:
根据不同的字符串哈希算法,可以计算出不同的key值,然后进行映射,此时可以映射到不同的位置,只有当这几个位全部为1的时候这个字符串才有可能存在(因为当字符串过多的时候可能映射出相同的位),只有一个位为0,那仫该串一定是不存在的,所以说布隆过滤器是一种近似的解决办法。将第一个文件映射到布隆过滤器中,然后拿第二个文件中的每个串进行对比(计算出特定串的key,通过不同的哈希算法映射出不同的位,如果全为1则认为该串是两个文件的交集;如果有一位为0那仫该串一定不是交集).
既然叫做切分,顾名思义就是将大文件切分为小文件,那仫如何切分?切分的依据是什仫呢?如果我们在切分的时候可以将相似或者相同的文件切分到同一个文件中那仫是不是就加快了查找交集的速度呢?答案是肯定的。
知道了哈希切分的依据我们应该如何处理呢?我们可以根据字符串的某个哈希算法得到该字符串的key,然后将key模要分割的文件数(假设为1000个文件,文件编号为0~999),我们将结果相同的字符串放到同一个文件中(两个文件中的字符串通过相同的哈希算法就会被分到下标相同的文件中),此时我们只需要将下标相同的文件进行比对就可以了。。。
哈希切分明显比布隆过滤器的方法效率要高,时间复杂度为O(N).
具有删除功能的BloomFilter:
在上面实现的布隆过滤器中引用了不同的哈希算法,有想研究哈希算法的的童鞋可参考各种字符串Hash函数>>>
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
CDA数据分析师 出品 作者:李诗怡 定义区别 · 场景举例 · 指标分类 · 计算方法 知识体系总览 模块 包含内容 一、核 ...
2026-10-09在数据分析工作流中,业务数据大多存储在各类关系型数据库内,例如MySQL、PostgreSQL、SQLite等。Pandas是Python生态中主流的数 ...
2026-10-09在数字化精细化运营时代,海量用户存在需求差异、行为差异、价值差异与偏好差异。如果企业采用“一刀切”的统一营销、统一服务、 ...
2026-10-09 很多数据分析师拿到数据就开始清洗、建模,但当被问到“这批数据属于什么类型——结构化还是非结构化?分类变量还是数值变量 ...
2026-10-09指标体系是企业数字化分析、业务监控、经营决策的核心基础框架,是将零散数据转化为可衡量、可对比、可落地业务价值的关键体系。 ...
2026-10-08随着市场竞争日趋饱和,同质化低价竞争逐渐陷入内卷僵局,传统以价格、渠道、促销为核心的营销模式边际效益持续递减。在此背景下 ...
2026-10-08 很多数据分析师画过趋势图、做过业绩预测,但当被问到“这个月销售额增长20%,到底是长期趋势自然增长,还是促销活动的短期 ...
2026-10-08你有没有想过,手机里点外卖、刷社交软件、转一笔账,背后到底是谁在替你"记着账"? 答案其实很简单:数据库,以及跟它对话的那 ...
2026-10-07CDA数据分析师 出品 作者:李诗怡 一、数据分析四大思维 1. 对比思维:没有对比就没有分析 核心观点:单独一个数字没有意义,有 ...
2026-10-05Kimball 是方法,星型模型是它产出的形状。 很多人把"Kimball vs 星型模型"当成一道选择题——这本身就是个误会:Kimball 是动词 ...
2026-10-05写在开头 老板在微信上甩来一句: "帮我看下为什么销量跌了。" ” 你回工位,打开 SQL,开始写。查订单表、拉近三个月、按 ...
2026-10-03CDA数据分析师 出品 作者:李诗怡 1. 事实表 vs 维度表 对比维度 事实表 维度表 核心问题 记录“业务发生了什么事” 描述 ...
2026-10-02做数据聚合时,PySpark的groupBy()确实能完成统计,这也是它的本职工作。但它有一个根本性局限:每一组数据,最终只能返回一行 ...
2026-10-01热力地图是数据可视化中极具辨识度与实用性的空间分析图表,结合地理空间维度与数据密度特征,通过颜色深浅、色阶渐变直观展示数 ...
2026-09-30 很多数据分析师做过按月份的销售额趋势图,画过按天的流量折线图,但当被问到“时间序列和普通数据有什么本质区别”“季节性 ...
2026-09-30同样是“银行数据岗”,在国有大行总行数据中心、在一家城商行的零售部、在银行系金融科技子公司、在保险公司,工作内容、成长节 ...
2026-09-29在数据分析与统计学研究中,数据往往不是独立存在的,不同变量之间普遍存在相互关联、相互影响的关系。相关性统计分析是挖掘变量 ...
2026-09-29 导读:大多数人只把 dataclasses 当成偷懒工具,用来少写 __init__、__repr__ 这类魔法方法。但它的能力远不止于此。本文带 ...
2026-09-29 很多数据分析师能熟练地计算指标、搭建标签体系,但当被问到“画像到底在解决什么问题”“画像和标签是什么关系”“画像如何 ...
2026-09-29在MySQL数据库运维与业务开发中,行业普遍存在“数据达到千万级就必须分表”的说法。但在实际生产环境中,千万条数据并不是强制 ...
2026-09-28