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

基本思路

  • 哈希分片。计算每个数据的哈希码,再进行求模运算,这样相同的数据将进入相同的分片。
  • 字典树/哈希表。对每个分片,统计数据出现的次数。
  • 堆。利用堆求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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值