找工作——大資料的處理方式

來源:互聯網
上載者:User

標籤:

1. top K問題:在海量資料中找出出現頻率最高的前K個數、或從海量資料中找出最大的前K個數,這類問題統稱為top K問題。

針對top K類問題,通常比較好的方式是分治+hash+小頂堆

eg:在1億個浮點數中找出其中最大的10000個。

方法一:排序取出前10000個。  每個float佔4B,1億個浮點數400MB,對於記憶體小於400MB的該方法不能一次將全部資料讀入記憶體進行排序,而且排序是對所有元素進行排序,做了很多無用功。

方法二:局部淘汰法。 用一個容器儲存前10000個數,然後將剩餘數字一一與容器中的最小數字比較,如果所有後續的元素都比容器中10000個數還小,那麼容器內的這10000個數就是最大的10000個數。若某一後續元素比容器內的最小元素大,則刪除掉容器內的最小元素,並將該元素插入容器,最後遍曆完這1億個數,得到結果容器中儲存的數即為最終結果。

方法三:分治法。  將1億個資料分成100份,每份100萬,找出每份資料中最大的10000個,最後在100*10000個資料裡面找出最大的10000個。如果100萬選的足夠理想,那麼可以濾掉1億資料裡面99%的資料。

方法四:最小堆。 先讀10000個資料構造大小為10000的小頂堆,然後遍曆後續的數字,並與堆頂(最小)數字進行比較,若比最小的數字小,則繼續讀取後續數字;若比堆頂數字大,則替換堆頂元素並重新調整堆為小頂堆。直到1億個資料遍曆完畢。

如果在求1億個出現次數最多的100個數,MapReduce  直接將資料均分到不同的機器上進行處理是無法得到正確結果,由於一個資料可能被分到不同的主機上,而另一個完全可能狙擊到一個機器上。

2. 重複問題:在海量資料中尋找重複出現的元素或者去除重複出現的元素。針對此類問題,一般可以用位元影像法實現。 例如:已知某個檔案中包含一些電話號碼,每個號碼為8位,統計不同號碼的個數。

解決辦法:8位整數可以表示的最大十進位數值為99999999,如果每個數字對應位元影像中的一個為,那麼儲存八位整數大約需要99Mbit,因為1Byte=8bit,所以99Mbit摺合成記憶體為99/8=12.375MB的記憶體,既可以使用12.375的記憶體表示所有8位元電話號碼的內容。

3. 排序法:海量資料排序。 例如:針對一個檔案中有9億條不重複的整數,對這個檔案中數字進行排序。

方法一:位元影像法

找工作——大資料的處理方式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.