海量数据处理面试题与Bit-map详解

海量数据面试题目解析:



1、A,B两个文件各存放50亿条URL,每条URL占用64字节,内存限制4G,找出A,B文件共同的URL
  答:方案一、50亿条数据,每条64字节。文件大小等于50G*64=320G,远大于内存限制的4G,不能将其完全加载到内存中,考虑分而治之的方法:
              1、分而治之/hash映射:遍历文件A,对每个url求取hash(url)%1000,然后根据所取得的值将url分别存储到1000个小文件中(a0,a1,...a999),每个文件大小约300M
              2、遍历文件B,对每个url采取和A相同的方式分别存储到1000个小文件中(b0,b1,...b999),这样处理后,所有可能相同的url都在对应的小文件(a0 vs b0,a1 vs b1,...,a999 vs b999)中,不对应的小文件不可能有相同的url。然后求出1000对小文件中相同的url即可
              3、hash_set统计:求每对小文件中相同的url时,可以把其中一个小文件的url存储到hash_set中,然后遍历另一个小文件的每个url,看其是否在刚才构建的hash_set中,如果是,那么就是共同的url,存到文件中就可以了
      方案二、
              如果允许有一定的容错率,可以使用bloom filter,4G内存大概表示340亿bit。将其中一个文件中的url使用bloom filet映射到340亿bit,然后挨个读取另外一个文件中的url,检查是否与Bloom filter相同,如果是,则具有相同的url(注意会有一定的错误率)                
2、10个文件,每个1G,每个文件每行存放的是用户的query,每个文件的query可能重复,要求按照query的频度排序
            方案一、
                        1、hash映射:顺序读取10个文件,按照hash(query)%10的结果,将query写入到另外10个文件(a0,...,a9)中,这样生成的文件每个的大小

你可能感兴趣的:(数据挖掘)