常见海量数据处理问题的解决思路

我是研究僧i 提交于 2019-12-08 18:57:16

基本思路

  • 哈希分片。计算每个数据的哈希码,再进行求模运算,这样相同的数据将进入相同的分片。
  • 字典树/哈希表。对每个分片,统计数据出现的次数。
  • 堆。利用堆求topK问题。
  • 归并。由于每个分片之间不存在重复数据,归并过程就很简单。

常见题目

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

  分别对a、b两个文件进行哈希分片,方法是hash(s)%1000,这样将得到2000个文件,分别是a0,a1,...a999,b0,b1,...b999。分别对ai和bj进行处理,方法是将ai中的数据放入哈希表中,然后判断bj中的数据是否出现在该哈希表中,如果是,那么它就是公共数据。

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

  利用2比特的BitMap。00表示不存在,01表示出现一次,11表示出现多次,依次将2.5亿个数放入BitMap中,需要的内存大约是2^32*2bit=1GB。

1000万字符串,其中有些是重复的,需要把重复的全部去掉,保留没有重复的字符串。请怎么设计和实现?

  利用哈希分片,将1000万字符串分为100个小文件,然后对每个小文件去重,方法是利用字典树。最后将这100个结果合并起来。

一个文本文件,找出前10个经常出现的词,但这次文件比较长,说是上亿行或十亿行,总之无法一次读入内存,问最优解。

  首先进行哈希分片,将所有数据分为100个小文件,然后再利用字典树对每个小文件统计次数,再计算topK,可以使用最小堆,最后归并。

将多个集合合并成没有交集的集合:给定一个字符串的集合,格式如:(aaa,bbb,ccc),(ccc,dddd),(eee),(mmm)。要求将其中交集不为空的集合合并,要求合并完成的集合之间无交集,例如上例应输出(aaa,bbb,ccc,ddd),(eee),(mmm)。

  利用并查集实现。

转载于:https://juejin.im/post/5c25983c6fb9a04a0b223d64

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!