0
我正在嘗試使用Python中的mrjob框架編寫MapReduce程序來計算Trigrams。到目前爲止,這是我所:MapReduce:如何跟蹤映射器中多行的狀態(比如說計數trigrams)?
from mrjob.job import MRJob
class MRTrigram(MRJob):
def mapper(self, _, line):
w = line.split()
for idx,word in enumerate(w):
if idx < len(w) - 2:
# Generate a trigram using the current word and next 2 words
trigram = w[idx] + " " + w[idx + 1] + " " + w[idx + 2]
yield trigram, 1
def reducer(self, key, values):
yield sum(values), key
# ignore this part - its just standard bolierplate for mrjob!
if __name__ == '__main__':
MRTrigram.run()
如可以看出,我還沒有處理,其中一個卦是分裂成多個行(比方說,「這是」在3線的末端的情況下,在第4行開頭的「最好的時間」 - 但是我的代碼不會捕獲trigram「在這種情況下它是」!)。
如何在多個映射調用中保留狀態,確保無論映射器是否由底層運行時分配作業,只有連續線條上的卦被計數?我想將每行的最後2個單詞存儲在MRTrigram類中的一個持久數據結構中,但後來我意識到我無法保證我是否在線i和i + 1之間比較單詞(而不是線i,j,其中j可以在文檔中的任何位置行!)。
任何想法讓我在正確的軌道上?
真的,沒有人在星期一對MWE和明確的查詢提出問題嗎?也許它不像我想的那麼簡單! :) – TCSGrad
我也對此感興趣。網上的每個實現似乎都忽略了這個問題,下面的答案是沒有用的。 –