大数据量问题分析

来源:互联网 发布:淘宝u站中心 编辑:程序博客网 时间:2024/05/22 12:13

整理自网络

1、大数据量排序,重复次数最高10条数据

原出处:
重复次数最高的10条数据

有10个G的数据。如果两条数据一样,则表示该两条数据重复了,现在给你512M的内存,把这10G中重复次数最高的10条数据取出来。

分析:10G是数据整型,那实际放到内存中占用不了这么多,会略小点,内存中用4B INT保存,而文本中用每个字符就是1B。但还是得考虑切分数据。

解决

通用方法A:

1. 先排序, 10G数据分成40份,每份256M,排序,合并相同数据并加上计数器,写到临时文件chunk01~chunk20。2. 对每一chunk, 读入内存,对每一条数据,再依次读入其后续个chunk, 合并相同数据的计数,后写入一个文件count。为了避免重复计数,在计数累加后需要将原来chunk的计数清零并回写文件。以chunk01为例。假设chunk01中有数据A-8(数据A, 8次),chunk02中有A-2,那么合并chunk02后chunk01的内存中为A-10, chunk02中为A-0,这时把chunk02写回文件,然后读入chunk03继续处理处理。最后把chunk01中计数不为0的数据(chunk01里不会有计数为0的,但是后面的chunk会有)写入文件count.3. 对count文件进行按重复次数排序。(分组,排序,然后每组选前10,再排序)

方法2:
如果知道数据范围,并且范围不太,数据重复率也较高。可直接利用数组Hash的方式来统计出现次数。如数据范围在多少万内,可用一个 int tem[MAX_INT]来统计,所需内存为 MAX_INT * 4 B。
MAX_INT * 4B = 2^32 * 4B = 16GB

待完成 :
大数据排序之TopK问题
怎么在海量数据中找出重复次数最多的一个

2、海量日志数据,提取出某日访问百度次数最多的那个IP

3、搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。

4、有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。

5、有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。

6、 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?

7、在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数。

8、腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?

9、怎么在海量数据中找出重复次数最多的一个?

10、上千万或上亿数据(有重复),统计其中出现次数最多的钱N个数据。

原创粉丝点击