2014-04-17 34 views
1

我的每個映射器都需要訪問非常大的字典。有沒有辦法避免每個mapper打開它自己的副本的開銷,而是讓它們都指向一個全局共享對象?如何在DISCO中的映射器之間獲得共享的全局對象

任何針對DISCO或mapreduce範例的建議都會有所幫助。

+0

我看到有人用: '全球my_dict' '如果my_dict不是在全局():'' = my_dict load_dict()' ,但我不知道這是否會實際工作..需要測試它 – rupen

+0

我在想..也許discodb可能是我正在尋找..它的文檔說 - (a)「與Python的內置dict對象相比,DiscoDB可以處理數千萬個鍵值對而不消耗千兆字節的記憶。」 (b)「這樣做的好處是,在它們被保存後,通過磁盤和密鑰查找實例化它們是閃電般的操作,這要歸功於內存映射。」 有什麼想法? – rupen

回答

0

使用Redis key-value存儲

可以快速安裝在Linux和Windows編譯的版本也可以。

python redis package將允許您真正輕鬆地編寫,讀取和更新值。

使用散列數據類型是最好的服務,您可以添加/編輯所謂的字段(Python字典術語中的鍵)的新值,它非常快速,它也非常簡單。

即使對於獨立進程,此解決方案也可以工作。您甚至可以通過網絡共享Redis中的數據,因此對於map/reduce場景,這可能是一個不錯的選擇。

唯一的問題是,當存儲和恢復值時,您必須關心的是值只能是字符串,因此您必須對它們進行序列化和反序列化。 json.dumps和json.loads對此非常有效。