海量数据处理问题

1.给定一个大小超过100G的文件,其中存在IP地址,找出其中出现次数最多的IP地址。

思路:显然我们是不可能将这100G内存直接加载到内存中去处理的。所以我们可以对大文件进行划分,前提当然是相同的IP地址会被划分在一块。假定我们将这个文件分为1024份,那么一个文件的大小大概为100M,然后利用哈希算法对IP地址进行映射,得到的值%1024,将同一个IP地址映射到同一个文件中。然后对每个文件进行处理,以他们的hash(IP) 作为Key,value作为每个IP出现的次数,最后利用排序算法对value进行排序,找到每个小文件中出现次数最多的IP。

用这种方法解决这个问题的关键在于我们在用哈希函数进行哈希切分后相同的IP地址一定会被分到同一个小文件里。对于哈希切分,相同的key,得到的哈希值一定相同。

2.给定100亿个整数,找到其中只出现一次的整数。

思路:我们知道,整数总共有大概42亿,所以100亿里肯定有重复的数字,我们可以试着用位图解决这个问题,但是位图只能表示一个数是否存在,所以我们需要两个位来表示一个数。我们可以用00来表示不存在,用01表示存在一次,用10表示存在一个以上。(定义两个BitMap)。1G=2^30B,1B=8bit。所以1G大概可以表示40多亿数,可以解决这个问题。

3. 给定两个文件,分别有100亿个query,我们只有1G内存,如何找到两个文件的交集(hash切分和布隆过滤器)。 
基本思路:对文件A进行哈希切分,读取每一个query,计算哈希值,例如我们要切分成100份,就可以让hash值%100,如果模的值为0,就把这个query放到布隆过滤器中,这样我们就得到了0号集合;然后遍历文件B,对其中的query进行hash值,%100,如果模的值为0,就在布隆过滤器中查找。
依次处理1号集合(hash值%100等于1),2号集合,3号集合..........
备注:布隆的不在是准确的,但在是有误差的。

4. 给上千个文件, 每个文件大小为1K - 100M, 设计算法找到某个词存在在哪些文件中(倒排索引).

基本思路:正排:通过文件id,找到包含哪些词。

                倒排:通过词,找到id.















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值