如何對大資料進行排序

2021-10-05 15:27:34 字數 783 閱讀 1982

現有8g的資料,其中都是無符號的int型,現有1g記憶體,如何對這些資料排序。

答:首先建立乙個struct將資料報起來,結構體包含資料的值及它出現的次數。需要建立乙個大根堆,每個大根堆的乙個資料項是這個結構體,且此結構體《資料佔4位元組,詞頻佔8位元組》,所以大概可以建8千萬個數的大根堆,但是還需要建立乙個表《資料佔4位元組,詞頻佔8位元組》,其中儲存已經在大根堆中的數,方便二次遍歷計算詞頻,所以大概可以建立包含k個數的大根堆。

然後開始遍歷檔案中的資料,每次遇到新的數字就假加入表中,及大根堆中(如遇到相同的,即表中已有的數,則跳過)。一直遍歷到將大根堆填滿為止,然後接下來每次遍歷的資料就與大根堆堆頂進行比較,如果其大於堆頂,則跳過不管(因為要先找到前k個最小種類的數,說明這個數一定不在這個範圍內,因為它大於了這個堆裡的所有數),如果遇到的數x小於堆頂數y,則將堆頂y取出,表中的堆頂y也取出,將x加入大根堆後,重新維持大根堆,x也加入表中。就這樣遍歷完所有數後,大根堆中就儲存了所有數前k個最小的種類的數(但是每個種類可能有相同的數),然後再根據表重新遍歷一次原資料,在原來的雜湊表中得到大根堆中每個數的詞頻,然後再將此詞頻更新到大根堆中。

可能會得到如下結果

將這些資料按大根堆排序後輸出到乙個檔案裡,接下來記住這個堆裡的最大值max = a;然後清空堆和雜湊表,重新遍歷原資料,遇到小於等於a的直接跳過,然後重新維持乙個大根堆和雜湊表,找到接下來k個種類最小的數,排序後輸出到另乙個檔案中。直到最後生成了多個檔案,將檔案連線在一起就排序完成了。

如何對map進行排序

常用的map有hashmap,treemap,linkedhashmap hashmap 最常用的map,根據key的hashcode值來儲存資料,根據key可以直接獲取它的value,具有很快的訪問速度。hashmap最多隻允許一條記錄的key值為null 多條會覆蓋 允許多條記錄的value為n...

對大資料進行實時分析

大資料分析 bda 包括大資料的採集 儲存 分析 展示。而其中分析是bda的關鍵。說到分析,可以分為歷史分析和實時分析。上次我們著重提過了歷史分析,尤其是互動式歷史分析,當然還有批處理式的歷史分析。這次,我們回過頭來再談談實時分析,包括流處理 cep,等等。說到cep,複雜事件處理 complex ...

對大資料進行實時分析

大資料分析 bda 包括大資料的採集 儲存 分析 展示。而其中分析是bda的關鍵。說到分析,可以分為歷史分析和實時分析。上次我們著重提過了歷史分析,尤其是互動式歷史分析,當然還有批處理式的歷史分析。這次,我們回過頭來再談談實時分析,包括流處理 cep,等等。說到cep,複雜事件處理 complex ...