海量数据处理思路「建议收藏」

海量数据处理思路「建议收藏」海量数据处理思路海量数据处理海量数据,不能一次加载到内存中海量数据topK(最大和最小k个数),第k大,第k小的数海量数据判断一个整数是否存在其中海量数据找出不重复的数字找出A,B两个海量url文件中共同的url海量数据topK最大K使用最小堆,最小K使用最大堆,这里以最大K为例海量数据hash分块维护最小堆的K个数据的数据容器堆中数据是topK大的数据,堆顶的数据是第K大数据先将海量数据hash再取模m,分成m个小文件,hash(num)%m,也可以直接取模在

大家好,又见面了,我是你们的朋友全栈君。

海量数据处理思路


海量数据处理

海量数据,不能一次加载到内存中

  • 海量数据topK(最大和最小k个数),第k大,第k小的数
  • 海量数据判断一个整数是否存在其中
  • 海量数据找出不重复的数字
  • 找出A,B两个海量url文件中共同的url

海量数据topK

最大K使用最小堆,最小K使用最大堆,这里以最大K为例

  • 海量数据hash分块
  • 维护最小堆的K个数据的数据容器
  • 堆中数据是topK大的数据,堆顶的数据是第K大数据
  1. 先将海量数据hash再取模m,分成m个小文件,hash(num)%m,也可以直接取模
  2. 在每个小文件中维护K个数据的最小堆,堆顶是当前堆中的最小值
  3. 遍历每个小文件中剩余的数据,与堆顶的数据进行比较,更新最小堆中的数据
  4. 生成m * K个数据,然后对这些数据再进行排序,或者再次通过维护最小堆

变形

  1. 第K大不只是topK,此时堆顶数据即是
  2. 只求最大或最小
  3. 海量数据不仅仅是整数,也可以是字符串
  4. 海量数据按照出现的次数或者频率排序,topK
  • 海量数据按照出现的次数或者频率排序,topK
  1. 先将海量数据hash再取模m,分成m个小文件,hash(num)%m
  2. 扫描每个小文件的数据,通过hash_map建立值和频率的键值对
  3. 以出现的频率维护最小堆的K个数据的数据容器
  4. 遍历每个小文件中剩余的数据,与堆顶的数据进行比较,更新最小堆中的数据
  5. 生成m * K个数据,然后对这些数据再进行排序,或者再次通过维护最小堆

找出A,B两个海量url文件中共同的url

题目:两个文件各存50亿个url,每个url64个字节,内存限制4G,找出A,B共同的url

  • 单个文件读取肯定超出内存大小,所以还是采取之前的分治思想,大化小,对A/B分别取模分成1000个文件存储,这样两个文件中相同的url都被分到相同的小文件中,若有一方的小文件还是太大,则可以扩大分块或者通过不同hash函数继续hash(若继续,两方应该一起),50亿url算下来每个文件300M。
  • 对小文件求公共url的时候可以使用hash_set去重。A文件Set建立后另外一个文件的内容遍历跟Set中内容比对,如果相等则记录

bitmap

bitmap一般是total/32 + 1个数组,从a[0]开始,每组是32bit表示,对应位的0或1表示十进制的0-31是否存在,可以用于快速排序,快速去重,快速查询

海量数据判断一个整数是否存在其中

  • 分治思想,首先分成小文件,然后建立HashTable进行统计
  • 可以使用BitMap,每个数分配1Bit,0不存在,1存在建立完毕扫描数据把对应位置的比特位描成0/1,最后查找整数的位置是否为1(通过商判断在哪个数组中,余数判断哪一位)

海量数据找出不重复的数字/仅出现一次的数据

  • 可以使用BitMap,每个数分配两Bit,00不存在,01出现一次,10出现多次,11没意义。需要内存2^32 * 8 * 2bit,建立完毕扫描数据把对应位置的比特位描成00/01/10/11,最后查找01
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152458.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • WOL开启远程唤醒开机功能笔记

    WOL开启远程唤醒开机功能笔记现在主板都支持网卡远程唤醒功能,要是用远程唤醒功能。具体如下操作:1.CMOS开启PCIE设备唤醒功能即网卡远程唤醒功能有点主板显示wakeonlan如:2.进入系统后设备管理-网卡配置-高级-关机网络唤醒魔术封包唤醒及样式比对唤醒通通开启。3.网卡的电源管理选项中,允许计算机关闭此设备以节约电源一定要关闭,否则网卡断电了就无法唤醒了。4.静态绑定IP,这样就可以通过wakeonlan局域网远程唤醒开机了。但外网远程唤醒还需要有公网IP和路由器端口映射下。如果要外.

  • vs 2010 专业版 密钥「建议收藏」

    vs 2010 专业版 密钥「建议收藏」YCFHQ-9DWCY-DKV88-T2TMH-G7BHP转载于:https://www.cnblogs.com/daretodream/archive/2013/04/02/2995147.html

  • IDEA的基本使用:让你的IDEA有飞一般的感觉[通俗易懂]

    IDEA的基本使用:让你的IDEA有飞一般的感觉[通俗易懂]1.设置maven在File->settings->搜索maven Mavanhomedirectory–设置maven安装包的bin文件夹所在的位置 Usersettingsfile–设置setting文件所在的位置 Localrepository–设置本地仓库的2.IDEA设置代码行宽度在File->settings->E…

  • Hive Hsql 常用命令「建议收藏」

    Hive Hsql 常用命令「建议收藏」简介Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计。以下介绍常用的Hive的类SQL语句。创建表:hive>createtabletablename(idint,namestri…

  • 相位式激光测距法中相位产生原理「建议收藏」

    相位式激光测距法中相位产生原理「建议收藏」相位式激光测距原理深入解析

  • python批量执行sql语句_python jdbc

    python批量执行sql语句_python jdbc一、前言在开发的过程中,总希望方法执行完了可以看到完整是sql语句,从而判断执行的是否正确,所以就希望有一个可以打印sql语句的插件。p6spy就是一款针对数据库访问操作的动态监控框架,他可以和数据库无缝截取和操纵,而不必对现有应该用程序的代码做任何修改。通过p6spy可以直接打印数据库执行的语句,下面向大家介绍一下p6spy。二、使用p6spy,需要什么?p6spy的ja…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号