海量数据处理专题

100亿个数排序

先将数分为100份,即分到100个小文件中,然后逐个文件排序,最后采用多路归并排序,写入一个大文件中。
1 但是,这种朴素做法每次都要比较100次,才能确定当前最小值,所以,这部分可以优化,即建立一个最小堆,每个值为pari(num,fd),每次将堆顶元素踢出,从踢出数所属的文件中再读入一个元素。
2 前面逐个文件排序的时候,可以并行,排序是耗cpu,读写数据耗io.所以可以利用cpu,io进行并行处理。

100亿个数求top k。

单核时,直接用堆处理,建立一个k大小的堆,多核时,将其分为100份,然后多核并行找出当个文件的top k,然后再归并。

100亿个 数/字符串 求频率最高的top k个

用hash(num)%100将数分到100个文件当中,然后用hashmap求出每个频率,如果是字符串的话,这步可以用tries来统计频率。然后用堆找出top k个,然后100个文件的top k进行比较,即可求出最高的top k。

1亿整数求重复

数据量在比较小,可以用位图解决,1亿个数,2bit*1亿/8的位图,内存可以承受,即用位图的话,数据量减少为1/4。

两个存储100亿url文件查找重复项

文件a,先用hash(url)%100分为100,文件b照做,因为采用相同的hash,所以相同的url会出现在相同的文件中,所以只要比较a1 b1,a2 b2 等等即可,a1 vs b1 的话,可以用较小的那个文件建立hashmap,然后比较大的那个文件从hashmap中找,是否存在该项。

海量数据求中位数

  1. 类似快排方法,随便从中取出一个数,然后比这个数小的,分到file0中,比这个数大的,分到file1中,如果file0有40个,file1有60个,则说明中位数在file1文件中,继续从文件file1用这种方法,直到数据可以发到内存,就直接用排序。
  2. 用hash把大文件变小,file文件有100亿个,将其分为10份,划分的时候,按照大小来划分,例如char类型,最大为127,划分为10份,每份间隔127/10=12,所以第一份为0-12,第二份13-25,依次类推统计每个文件中个数,然后就可以看出中位数在10个文件中的哪个,然后在该文件中继续用这种方法划分查找,直到找到。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值