从还有一个角度看大数据量处理利器:布隆过滤器

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介:
思路:从简单的排序谈到BitMap算法。再谈到数据去重问题,谈到大数据量处理利器:布隆过滤器。

情景1:对无反复的数据进行排序

@给定数据(2,4。1,12。9,7,6)怎样对它排序?

     方法1:主要的排序方法包含冒泡,快排等。

     方法2:使用BitMap算法

     方法1就不介绍了。方法2中所谓的BitMap是一个位数组。跟平时使用的数组的唯一区别在于操作的是位。

首先是开辟2个字节大小的位数组。长度为16(该长度由上述数据中最大的数字12决定的)如图



 
      然后。读取数据,2存放在位数组中下标为1的地方,值从0改为1。4存放在下标为3的地方,值从0改为1....结果如图


   

      最后,读取该位数组,得到排好序的数据是:(1,2。4,6。7。9。12)


      比較方法1和方法2的区别:方法2中,排序须要的时间复杂度和空间复杂度非常依赖与数据中最大的数字比方12,因此空间上讲须要开2个字节大小的内存,时间上须要遍历完整个数组。

当数据类似(1,1000。10万)仅仅有3个数据的时候。显然用方法2,时间复杂度和空间复杂度相当大,可是当数据比較密集时该方法就会显示出来优势。

情景2:对有反复的数据进行判重

   数据(2,4,1,12,2。9,7,6。1。4)怎样找出反复出现的数字?

       首先是开辟2个字节大小的位数组。长度为16(该长度由上述数据中最大的数字12决定的)如图


   

      当读取完12后。数组中的数据例如以下图:


      当读取2的时候,发现数组中的值是1。则推断出2是反复出现的。

应用

      应用1:某文件里包括一些8位的电话号码,统计出现的号码的个数?(推断有谁出现)

      8为最大是99 999 999。大约是99M的bit,12.5MB的内存,就能够统计出来出现的号码。

 

      应用2某文件里包括一些8位的电话号码。统计仅仅出现一次的号码?(推断有谁出现而且指出现1次)

      须要扩展一下,能够用两个bit表示一个号码,0代表没有出现过。1代表仅仅出现过1次,2代表至少出现2次。

 

 

      应用3:有两个文件,文件1中有1亿个10位的qq号码,文件2中有5千万个10位qq号码,推断两个文件里反复出现的qq号。

     首先建立10的10次方个大小的位数组(占用内存大约是1.25G)。所有初始化为0。读取第一个文件,相应的qq号存放到相应的未知,数值改为1。假设反复出现仍是1.读取完成第一个文件后。读取第二个文件。相应的位置为1则表示反复出现。

 

     应用4:有两个文件,文件1中有1亿个15位的qq号码,文件2中有5千万个15位的qq号码,推断两个文件里反复出现的qq号。

 


    应用4中,qq号码上升为15位的时候。显然内存是不够用了,这个时候怎么办?使用Bloom Filter(布隆过滤器)

 

Bloom Filter(布隆过滤器):

      对于Bit-Map分析一下,每次都会开辟一块表示最大数值大小的bit数组,比方情景1中的16,将相应的数据经过映射到bit数组的下标,这事实上是一种最简单的hash算法,对1去模。在上述应用4中,当qq号码改为15位的时候。Bit-Map就不太好用了,怎样改进呢?解决的方法:降低bit数组的长度,可是添加hash函数的个数

对于每个qq号码,我用K个hash函数,经过k次映射,得到k个不同位置,如果k=3,那么对于一个qq号码,映射到位数组中3个不同的位置


 

当读取第二个包括5千万个qq号码的文件的时候,使用相同的3个hash函数进行映射,当3个位置所有是1的时候才表示出现过,否则表示没有出现过。

有什么疑问吗?

      显然,对于一个qq号码,假设它在第一个文件里没有出现过。可是它映射的3个位置已经所有是1的情况会有吗?答案是会的,可是这样的概率是可控的,可控的意思是:这样的误差跟hash函数的个数和质量是有关系的。能够通过控制hash函数的个数和位数组的大小来控制误差概率。至于表示3者之间的关系精确的数学公式就不再具体研究了

能够这样讲。布隆过滤器是Bit-Map的进一步扩展,对于大数据量判重。布隆过滤器能够在内存中进行推断,避免了对磁盘的读写,效率是非常高的。以上是自己关于两者的理解,有错误望不吝赐教。






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5409339.html,如需转载请自行联系原作者

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
3月前
|
机器学习/深度学习 传感器 分布式计算
数据才是真救命的:聊聊如何用大数据提升灾难预警的精准度
数据才是真救命的:聊聊如何用大数据提升灾难预警的精准度
214 14
|
5月前
|
数据采集 分布式计算 DataWorks
ODPS在某公共数据项目上的实践
本项目基于公共数据定义及ODPS与DataWorks技术,构建一体化智能化数据平台,涵盖数据目录、归集、治理、共享与开放六大目标。通过十大子系统实现全流程管理,强化数据安全与流通,提升业务效率与决策能力,助力数字化改革。
176 4
|
4月前
|
机器学习/深度学习 运维 监控
运维不怕事多,就怕没数据——用大数据喂饱你的运维策略
运维不怕事多,就怕没数据——用大数据喂饱你的运维策略
168 0
|
5月前
|
分布式计算 DataWorks 数据处理
在数据浪潮中前行:记录一次我与ODPS的实践、思考与展望
本文详细介绍了在 AI 时代背景下,如何利用阿里云 ODPS 平台(尤其是 MaxCompute)进行分布式多模态数据处理的实践过程。内容涵盖技术架构解析、完整操作流程、实际部署步骤以及未来发展方向,同时结合 CSDN 博文深入探讨了多模态数据处理的技术挑战与创新路径,为企业提供高效、低成本的大规模数据处理方案。
305 3
|
5月前
|
SQL 人工智能 分布式计算
ODPS:数据浪潮中的成长与突围
本文讲述了作者在大数据浪潮中,通过引入阿里云ODPS体系(包括MaxCompute、DataWorks、Hologres)解决数据处理瓶颈、实现业务突破与个人成长的故事。从被海量数据困扰到构建“离线+实时”数据架构,ODPS不仅提升了数据处理效率,更推动了技术能力与业务影响力的双重跃迁。
|
3月前
|
传感器 人工智能 监控
数据下田,庄稼不“瞎种”——聊聊大数据如何帮农业提效
数据下田,庄稼不“瞎种”——聊聊大数据如何帮农业提效
148 14
|
2月前
|
传感器 人工智能 监控
拔俗多模态跨尺度大数据AI分析平台:让复杂数据“开口说话”的智能引擎
在数字化时代,多模态跨尺度大数据AI分析平台应运而生,打破数据孤岛,融合图像、文本、视频等多源信息,贯通微观与宏观尺度,实现智能诊断、预测与决策,广泛应用于医疗、制造、金融等领域,推动AI从“看懂”到“会思考”的跃迁。
|
3月前
|
机器学习/深度学习 传感器 监控
吃得安心靠数据?聊聊用大数据盯紧咱们的餐桌安全
吃得安心靠数据?聊聊用大数据盯紧咱们的餐桌安全
144 1
|
3月前
|
数据采集 自动驾驶 机器人
数据喂得好,机器人才能学得快:大数据对智能机器人训练的真正影响
数据喂得好,机器人才能学得快:大数据对智能机器人训练的真正影响
228 1

热门文章

最新文章