如何对10亿个QQ号进行去重?
这是个虚拟的问题,假设我有一个TXT文件,里面有10亿个QQ号(一行一条),其中可能有千万级别重复的号码,如何最快的去重呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
这是个虚拟的问题,假设我有一个TXT文件,里面有10亿个QQ号(一行一条),其中可能有千万级别重复的号码,如何最快的去重呢?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
存进一个Map,然后遍历。
利用Map不存在相同key的特性。
内存够就很简单了,分段、多线程、Map。
我没试过这么大的量,楼主也没虚拟使用场景,所以我也虚拟一个答案
我会开一台oracle之类实例,设置唯一键,然后把这些QQ号导入进db,db报错的就是重复的,忽略错误继续跑
如果oracle也吃不消(我也不知道吃不吃得消),就切片,导入100张表,单表1000万行绝对吃得消,利用db排序后导出,再和其他文件拼合继续导入。
mapreduce
用位表示数
例如, 号码 {1,2,3,5,8,13} 可以表示为:0-1-1-1-0-1-0-0-1-0-0-0-0-1,先放入,然后读出
按位表示QQ号是否存在,如果QQ号最多为10位数字,那最多也就需要1000+MB的内存,怎么算都够了
顺序处理太慢的话可以用多台机器对文件分块处理,最后把处理结果按位取或就行