如何从大量的url中找出相同的url如何从大量数据中找出高频词
如何从大量的url中找出相同的url给定a、b两个文件,各存放50亿个url,每个url各占64B,内存限制是4GB,请找出a、b两个文件共同的url
分析:
拆分成可以处理的文件,进行比较。
遍历a文件,求每天url的hash值,并对500求余,这样原来文件分成500份文件,编号a0,a1,a2…a499平均一份文件有1000万条数据,(100万字节就是1mb)文件大概640mb。b文件做相同处理,因为相同url的hash值相同,所以相同url会被分配到相同的文件中。
将着500份文件一一和b文件拆分出来的500文件比较。
比较过程是,把a文件的一个小文件中的内容加入set集合,遍历b文件的小文件,若set中存在相同的url,则说明是重复的url,写入一个准备好的文件。
思想
分而治之,进行哈希取余,把原有的文件切分成更多的小文件;
对每个子文件进行 HashSet 统计,选出重复的url。
分析:
1.将文件切分成2000份小文件。
1个G是切分成2000份文件,平均一份是500kb.
切分规则是在遍历每行单词时,计算单词的哈希值求2000的余数,从而确定一个单词应该划分到那个文件中,并且相同的单词会划分到同一份文件中。
2.求每一份文件词频前100的单词。
使用hashmap统计每个单词出现的次数。对hashmap排序,取词频前100的单词。保存下来。
3.遍历每份文件产出的词频前100的单词,第一份文件作为小顶堆的初始值,遍历剩余文件的前100单词,使用小顶堆选出大文件的词频前100的单词。



