2017-01-20 7 views
0

私はMapReduceの新版です。私は非常に簡単な質問があります。私はWordCountの問題を解決し、問題をテキストの上位Nレコードとして変更したいと考えています。私はテキスト上のすべての単語を並べ替えるが、私は最後のN値を取ることはできません。まず、テキストを読んで、各単語をレデューサーに1で送信し、レデューサーはそれぞれの単語ごとに番号を探します。それから私は単語の出現に従ってこれらの単語をソートしようとしました。しかし、私はトップNは、私は次のコードを使用して問題を解決しトップNレコードMapReduce on Python

from mrjob.job import MRJob 
from mrjob.step import MRStep 
from stemming.porter2 import stem 
class MRWordCount(MRJob): 
    def steps(self): 
      return [ 
       MRStep(mapper=self.mapper, 
        reducer=self.reducer), 
       MRStep(mapper=self.secondmapper, 
        reducer = self.secondreducer) 
       ] 

    def mapper(self,_,lines): 
     words = lines.strip().split() 
     for w in words: 
      yield stem(w.lower()),1 

    def reducer(self, key, values): 
     yield key, (sum(values)) 

    def secondmapper(self, key,value):  
     yield '%04d'%int(value), key 

    def secondreducer(self, key, values):  
     for v in values:   
      yield v,key 

if __name__ == '__main__': 
    MRWordCount.run() 

答えて

0

記録見つけることができません

from mrjob.job import MRJob 
from mrjob.step import MRStep 
from stemming.porter2 import stem 


class MRWordCount(MRJob): 
    def steps(self): 
      return [ 
       MRStep(mapper=self.mapper, 
        reducer=self.reducer), 
       MRStep(reducer = self.secondreducer) 
       ] 

    def mapper(self,_,lines): 
     words = lines.strip().split() 
     for w in words: 
      w = unicode(w, "utf-8", errors="ignore") 
      yield stem(w.lower()),1 

    def reducer(self, key, values): 
     yield None, ('%04d'%int(sum(values)),key) 

    def secondreducer(self, key, values): 
     self.aList= []  
     for v in values: 
      self.aList.append(v) 
     count = len(self.aList) 
     for m in range(count-5,count): 
      yield self.aList[m] 


if __name__ == '__main__': 
    MRWordCount.run() 
関連する問題