日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

海量数据处理方法的分析

發(fā)布時(shí)間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 海量数据处理方法的分析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文可以認(rèn)為是http://blog.csdn.net/v_JULY_v/article/details/6279498的讀后感,我是按照我理解的語言重新表述了一下而已。

海量數(shù)據(jù)處理的常用方法包括一下幾種:

1.分而治之/hash映射 + hash統(tǒng)計(jì) + 堆/快速/歸并排序;
2.雙層桶劃分
3.Bloom filter/Bitmap;
4.Trie樹/數(shù)據(jù)庫/倒排索引;
5.外排序;
6.分布式處理之Hadoop/Mapreduce。

?

1. 分而治之/hash映射 + hash統(tǒng)計(jì) + 堆/快速/歸并排序;
分治是算法的核心思想,不過需要證明分治是適用的才行。 如何分呢,就是用Hash函數(shù)來做,用hash函數(shù)把大數(shù)據(jù)集分成幾個(gè)小數(shù)據(jù)集,然后對(duì)小數(shù)據(jù)集進(jìn)行統(tǒng)計(jì),將多個(gè)子數(shù)據(jù)集的統(tǒng)計(jì)結(jié)果進(jìn)行歸并排序。例如:

海量日志數(shù)據(jù),提取出某日訪問百度次數(shù)最多的那個(gè)IP

可以IP地址按照IP%100,將IP地址分為100個(gè)子集,對(duì)各個(gè)子集分別統(tǒng)計(jì)頻度,然后取出各個(gè)子集出現(xiàn)最多的IP,進(jìn)而得到整體出現(xiàn)最多的IP

?

假設(shè)目前有一千萬個(gè)記錄(這些查詢串的重復(fù)度比較高,雖然總數(shù)是1千萬,但如果除去重復(fù)后,不超過3百萬個(gè)。一個(gè)查詢串的重復(fù)度越高,說明查詢它的用戶越多,也就是越熱門),請(qǐng)你統(tǒng)計(jì)最熱門的10個(gè)查詢串,要求使用的內(nèi)存不能超過1G。

這個(gè)也可以使用Trie樹,

有一個(gè)1G大小的一個(gè)文件,里面每一行是一個(gè)詞,詞的大小不超過16字節(jié),內(nèi)存限制大小是1M。返回頻數(shù)最高的100個(gè)詞。

?

海量數(shù)據(jù)分布在100臺(tái)電腦中,想個(gè)辦法高效統(tǒng)計(jì)出這批數(shù)據(jù)的TOP10。

?

有10個(gè)文件,每個(gè)文件1G,每個(gè)文件的每一行存放的都是用戶的query,每個(gè)文件的query都可能重復(fù)。要求你按照query的頻度排序。

?

給定a、b兩個(gè)文件,各存放50億個(gè)url,每個(gè)url各占64字節(jié),內(nèi)存限制是4G,讓你找出a、b文件共同的url?

?

?

2.雙層桶劃分
適用范圍:第k大,中位數(shù),不重復(fù)或重復(fù)的數(shù)字

2.5億個(gè)整數(shù)中找出不重復(fù)的整數(shù)的個(gè)數(shù),內(nèi)存空間不足以容納這2.5億個(gè)整數(shù)。

有點(diǎn)像鴿巢原理,整數(shù)個(gè)數(shù)為2^32,也就是,我們可以將這2^32個(gè)數(shù),劃分為2^8個(gè)區(qū)域(比如用單個(gè)文件代表一個(gè)區(qū)域),然后將數(shù)據(jù)分離到不同的區(qū)域,然后不同的區(qū)域在利用bitmap就可以直接解決了。也就是說只要有足夠的磁盤空間,就可以很方便的解決。

?

5億個(gè)int找它們的中位數(shù)。

這個(gè)例子比上面那個(gè)更明顯。首先我們將int劃分為2^16個(gè)區(qū)域,然后讀取數(shù)據(jù)統(tǒng)計(jì)落到各個(gè)區(qū)域里的數(shù)的個(gè)數(shù),之后我們根據(jù)統(tǒng)計(jì)結(jié)果就可以判斷中位數(shù)落到那個(gè)區(qū)域,同時(shí)知道這個(gè)區(qū)域中的第幾大數(shù)剛好是中位數(shù)。然后第二次掃描我們只統(tǒng)計(jì)落在這個(gè)區(qū)域中的那些數(shù)就可以了。

?

實(shí)際上,如果不是int是int64,我們可以經(jīng)過3次這樣的劃分即可降低到可以接受的程度。即可以先將int64分成2^24個(gè)區(qū)域,然后確定區(qū)域的第幾大數(shù),在將該區(qū)域分成2^20個(gè)子區(qū)域,然后確定是子區(qū)域的第幾大數(shù),然后子區(qū)域里的數(shù)的個(gè)數(shù)只有2^20,就可以直接利用direct addr table進(jìn)行統(tǒng)計(jì)了。

3.Bloom filter/Bitmap

適用范圍:可以用來實(shí)現(xiàn)數(shù)據(jù)字典,進(jìn)行數(shù)據(jù)的判重,或者集合求交集

給你A,B兩個(gè)文件,各存放50億條URL,每條URL占用64字節(jié),內(nèi)存限制是4G,讓你找出A,B文件共同的URL。如果是三個(gè)乃至n個(gè)文件呢?

?

已知某個(gè)文件內(nèi)包含一些電話號(hào)碼,每個(gè)號(hào)碼為8位數(shù)字,統(tǒng)計(jì)不同號(hào)碼的個(gè)數(shù)。

?


8位最多99 999 999,大概需要99m個(gè)bit,大概10幾m字節(jié)的內(nèi)存即可。
2.5億個(gè)整數(shù)中找出不重復(fù)的整數(shù)的個(gè)數(shù),內(nèi)存空間不足以容納這2.5億個(gè)整數(shù)。

  將bit-map擴(kuò)展一下,用2bit表示一個(gè)數(shù)即可,0表示未出現(xiàn),1表示出現(xiàn)一次,2表示出現(xiàn)2次及以上。或者我們不用2bit來進(jìn)行表示,我們用兩個(gè)bit-map即可模擬實(shí)現(xiàn)這個(gè)2bit-map。


4.Trie樹/數(shù)據(jù)庫/倒排索引

適用范圍:數(shù)據(jù)量大,重復(fù)多,但是數(shù)據(jù)種類小可以放入內(nèi)存

Trie樹主要用來實(shí)現(xiàn)詞頻統(tǒng)計(jì)


5.外排序


6.分布式處理之Hadoop/Mapreduce


?

http://blog.csdn.net/v_july_v/article/details/7382693

轉(zhuǎn)載于:https://www.cnblogs.com/whyandinside/archive/2012/07/07/2580755.html

總結(jié)

以上是生活随笔為你收集整理的海量数据处理方法的分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。