我試圖了解map-reduce的概念,并希望使用mincemeat.py(一個適用于python的開源庫)來實(shí)現(xiàn)小型程序。我已經(jīng)使用映射器和化簡器獲得了一袋單詞的簡單單詞計數(shù)。但是,我想實(shí)現(xiàn)查找文檔中所有單詞的tf-idf分?jǐn)?shù)。為此,我認(rèn)為的第一步是獲得類型的字典{[word,docID]->count}。為此,我編寫了以下代碼def mapfn(k, v): for line in v.splitlines(): for word in line.split(): l = [word.lower(), k] yield l, 1但是,當(dāng)我運(yùn)行該程序時,出現(xiàn)以下錯誤。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內(nèi)生成列表,因?yàn)樵撳e誤表明縮小時不期望該列表。我對么?如果我是正確的話,有什么辦法可以做到這一點(diǎn)?或者,我是否需要查看除百果餡以外的其他任何圖書館?
1 回答

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