您的位置:首页 > 其它

海量数据处理

2018-04-02 20:55 253 查看

海量数据处理

预备知识

在解决大数据问题前,我们先准备一些基础知识:

1G=1073741824Byte 大约等于10亿字节

大数据问题思路:

1.特殊的数据结构能否解决

2.切分–>哈希切分(相同进一个) 切分次数最好大,这样平均每份小

常见问题

1)给一个超过100G大小的log file,log中存着IP地址,设计算法找到出现次数最到的ip地址

算法思想:分而治之+Hash

先哈希切分成1000份文件,每份平均是100m,相同的ip会进入同一个文件编号,定义一个max变量存放出现次数最多的,初值为0,在查的时候,把每一个文件存到map中,找出map中最大的,然后和max比较,比max大就赋值给max,之后继续遍历剩下的999个文件

2)给两个文件,分别有100亿个query, 我们只有1G内存,如何找到两个文件交集?分别给出精确算法和近似算法

精确算法:100亿个query,一个query大约60字节,100亿大约600G,哈希切分上1200份,不要切600份哈希且不均匀,相同查询会进入编号相同的文件,把A文件的1200份文件分别依次放到Set,然后B文件去看在不在

近似算法:

如果要得到近似结果的话可以使用布隆过滤器,将其中一个文件的内容映射到位图中,然后再用另一个文件中的内容到这个位图中寻找。

3)给定100亿个整数,设计算法找到只出现一次的整数!

两种解法:

1.用位图变形,用两个位,因为这些数有可能出现0次、1次、多次,只用一个bit位是无法表示的,所以我们需要用两个bit位来表示一个整数的存在状态即:00表示没出现,01表示只出现1次,10(或11)表示出现多次

2.分而治之+Hash

4)给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个⽂件交集!

1.100亿个整数大约是40G,分别哈希切分100份,然后进行分别对比

2.将一个文件中的数据映射到位图中(大约需要500M),然后再用第二个文件中的数据到位图中去寻找。这种方法的时间复杂度是O(N)。

5)1个文件有100亿个int, 1G内存,设计算法找到出现次数不超过2次的所有整数!

用位图变形,用两个位,因为这些数有可能出现0次、1次、多次,只用一个bit位是无法表示的,所以我们需要用两个bit位来表示一个整数的存在状态即:00表示没出现,01表示只出现1次,10(或11)表示出现多次
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  海量数据 hash