我試圖了解map-reduce的概念,并希望使用mincemeat.py(一個適用于python的開源庫)來實現小型程序。我已經使用映射器和化簡器獲得了一袋單詞的簡單單詞計數。但是,我想實現查找文檔中所有單詞的tf-idf分數。為此,我認為的第一步是獲得類型的字典{[word,docID]->count}。為此,我編寫了以下代碼def mapfn(k, v): for line in v.splitlines(): for word in line.split(): l = [word.lower(), k] yield l, 1但是,當我運行該程序時,出現以下錯誤。error: uncaptured python exception, closing channel <__main__.Client connected at 0x8a434ac> (<type 'exceptions.TypeError'>:unhashable type: 'list' [/usr/lib/python2.7/asyncore.py|read|83] [/usr/lib/python2.7/asyncore.py|handle_read_event|444] [/usr/lib/python2.7/asynchat.py|handle_read|140] [mincemeat.py|found_terminator|96] [mincemeat.py|process_command|194] [mincemeat.py|call_mapfn|171])我的理解是,使用mincemeat.py時,我們無法在map內生成列表,因為該錯誤表明縮小時不期望該列表。我對么?如果我是正確的話,有什么辦法可以做到這一點?或者,我是否需要查看除百果餡以外的其他任何圖書館?
1 回答

慕婉清6462132
TA貢獻1804條經驗 獲得超2個贊
我不知道百果餡,但是很顯然,它試圖將列表用作字典或集合的鍵,這是不可能的。與其產生一個列表,不如產生一個元組。(換句話說,更改[word.lower(),k]
為(word.lower(), k)
。
添加回答
舉報
0/150
提交
取消