算法之海量数据处理
1.散列分治或MapReduce 这种题目很多,大多都相似一通,针对数据特别多的情况下,一般可以选择MapReduce或者散列分治这两种方式其实思想很相似的只有些许不同;针对数据量不大的情况下可是直接加载进内存来的可以使用Trie树,红黑树这一套,hash表都可以使用。 寻找共同的URL 给定两个a和b文件,各存放50亿个URL,每个URL占64字节,内存限制4GB,请找出a和b文件中共同的URL。 一个文件的内存:5 000 000 000 * 64 = 320GB,每个文件可以分为100个小文件,每个文件大约是3.2GB。 思路一:散列分治,先把a通过hash函数分成100个小文件,在对每个小文件进行词频统计可以使用hash表,Trie树,红黑树这些,再把b也进行统计,在对a和b一起进行词频统计,如果有重复就聚在一块用标识符进行标记即可。 思路二:MapReduce,先对a进行MapReduce在对b进行MapReduce,然后再对a和b统计出来的结果在进行MapReduce即可。 思路三:Bloomfilter过滤器,把4GB建立一个位数组,然后把a文件映射上去,在从b文件里面查重。 ps:MapReduce先把文件直接分成M个块这样就生成了M个Map任务,Map进行URL的映射变为字典,在通过HashShuffe对每个Map任务进行分区,然后在merge