Pipe
返回 N 個第一個排序值的記憶體高效實用程序
我想僅使用以 UNIX 方式執行的現有程序來實現一個非常流行的 MapReduce 範例。問題是在大量數據中找到 N 個最頻繁的值。任何通用程式語言的通用解決方案是:
- 將列表中的每個值映射到一個元組(值,1)。
- 對相同的值進行分組,總結它們的計數。
- 按保持前 N 個頻繁項的計數對值進行排序。
為了提高效率,每個步驟都應該適合記憶體並儘可能並行化。因此,我可以在前兩個步驟中使用,
split
和from “core utils” 和from “more utils” 仍然滿足問題約束。但是為了實現最後一步,我需要始終同時保持不超過 N 個值,否則我會很快耗盡記憶體,所以顯然我不能使用piped to 。一種常見的方法是使用“優先隊列”資料結構,但有沒有這樣的程序?paste``xargs``sort``parallel``sort``head
GNU 排序將受益於 –range 函式以支持此常見操作: http ://lists.gnu.org/archive/html/bug-coreutils/2009-07/msg00019.html
所以我建議在 sort(1) 的本地版本中實現它,我們也會將它合併到上游以使其普遍可用