如何对大数据进行词频统计

假设有40亿个整数,每个整数占4字节,但是内存只有1G,问如何得到TOP10出现频率最高的整数。

首先统计词频需要用到HashMap,key是整数值,value是出现次数,假如直接遍历40亿个整数,并用HashMap统计词频,最坏情况是每个整数都不一样,这样需要有40亿条记录,每条记录有四个字节的key以及四个字节的value(无符号的四个字节的范围刚好好可以统计到40亿次,最坏情况一个数出现40亿次),这样总共需要320亿个字节内存存储哈希表,内存远远不够,1G内存可以存放大概1亿多一点的记录,也就是说需要将所有的数字分成多个文件,每个文件存放的数的种类不超过1亿种(相同的数无所谓,因为最后在记录里都压成了一条记录)。

所以需要做到以下几点:

1.相同的数都要放到一个文件里,不然没法统计词频

2.每个文件数字的种类不超过1亿种

3.数字能够在每个文件里均匀分布(和第二点表达的意思相同)

由于哈希函数的特点是可以让输入的数字,最后输出几乎均匀分布,且相同的输入一定是相同的输出。如果最后哈希的结果再%上一个数,那么也会在0到这个数的范围内均匀分布。于是可以对每个数字进行哈希后对100取余数,这样根据得到的结果可以将数字分在0到99为编号的文件中。这样再对每个文件进行哈希表词频统计得到TOP10的数字,最后再将每个文件的TOP10的数字提取出来,比较得到总的TOP10.

你可能感兴趣的:(如何对大数据进行词频统计)