大資料排序或取重或去重相關問題解決方案

2021-08-30 23:16:36 字數 429 閱讀 2482

「笨一休」大牛的初步提出了個方法:

1,利用hash對所有數進行取模(比如%1m),利用餘數進行分1k組;

2,再對1k組,內部進行hash查重複數。

晚上上自習時候想了想,覺得不需要設計hash函式來進行操作,一來很難設計出無衝突的hash函式,二來每次進行hash時候涉及取模操作,比較費時。想了個方法如下:

1,將10億=10^9個數劃分為n(n=1k或500)個區間段,即使用n個檔案儲存。每個檔案代表乙個區間(1《x《1m放在f1中,1m

2,掃瞄所有數,通過比較將數劃分到n個區間中;(可以採取判定樹方式比較)

3,分別對n個檔案,進行操作(取去重或排序之類),(此時可以對每個檔案中的資料,進行記憶體操作。陣列便可完成。因為資料隨機,平均每個檔案的資料個數為2m/1m個,2m/1m*4=8m/4m <10m;這裡也可以用bit操作更省記憶體)。

大資料排序,取重或去重相關問題案例

方案1 可以估計每個檔案安的大小為50g 64 320g,遠遠大於記憶體限制的4g。所以不可能將其完全載入到記憶體中處理。考慮採取分而治之的方法。s 遍歷檔案a,對每個url求取 然後根據所取得的值將url分別儲存到1000個小檔案 記為 中。這樣每個小檔案的大約為300m。s 遍歷檔案b,採取和a...

劍指offer 異或去重

這篇文章沒有 介紹的是純理論的思路。異或是一種基於二進位制的位運算,用符號xor或者 表示,其運算法則是對運算子兩側數的每乙個二進位制位,同值取0,異值取1。它與布林運算的區別在於,當運算子兩側均為1時,布林運算的結果為1,異或運算的結果為0。異或的性質 1 交換律 a b b a 2 結合律 a ...

劍指offer 異或去重

這篇文章沒有 介紹的是純理論的思路。異或是一種基於二進位制的位運算,用符號xor或者 表示,其運算法則是對運算子兩側數的每乙個二進位制位,同值取0,異值取1。它與布林運算的區別在於,當運算子兩側均為1時,布林運算的結果為1,異或運算的結果為0。異或的性質 1 交換律 a b b a 2 結合律 a ...