このpython3プログラムは、map/reduceを使用してテキストファイルから単語の頻度リストを生成しようとします。私は、最大のカウント値が最後に現れるように、第2レデューサーの利回り明細書で「カウント」として表される、ワード数をどのように並べるかを知りたいと思います。現在、結果の尾は次のようになります。コンテキストの場合カウントの2段階順序付けのマップ/縮小
"0002" "wouldn"
"0002" "wrap"
"0002" "x"
"0002" "xxx"
"0002" "young"
"0002" "zone"
、私はこのようなのpython3プログラムに任意の単語のテキストファイルを渡します。ここでは
python MapReduceWordFreqCounter.py book.txt
はMapReduceWordFreqCounter.py
のコードです:
from mrjob.job import MRJob
from mrjob.step import MRStep
import re
# ignore whitespace characters
WORD_REGEXP = re.compile(r"[\w']+")
class MapReduceWordFreqCounter(MRJob):
def steps(self):
return [
MRStep(mapper=self.mapper_get_words,
reducer=self.reducer_count_words),
MRStep(mapper=self.mapper_make_counts_key,
reducer = self.reducer_output_words)
]
def mapper_get_words(self, _, line):
words = WORD_REGEXP.findall(line)
for word in words:
yield word.lower(), 1
def reducer_count_words(self, word, values):
yield word, sum(values)
def mapper_make_counts_key(self, word, count):
yield str(count).rjust(4,'0'), word
def reducer_output_words(self, count, words):
for word in words:
yield count, word
if __name__ == '__main__':
MapReduceWordFreqCounter.run()