2016-12-03 5 views
0

Я бегу следующий код Python в MapReduce:MapReduce: ValueError: слишком много значений для распаковки (ожидается 2)

from mrjob.job import MRJob 
import collections 

bigram = collections.defaultdict(float) 
unigram = collections.defaultdict(float) 


class MRWordFreqCount(MRJob): 

    def mapper(self, _, line): 
     # Now we loop over lines in the system input 
     line = line.strip().split() 
     # go through each word in sentence 
     i = 0 
     for word in line: 
      if i > 0: 
       hist = word 
      else: 
       hist = '' 

      word = CleanWord(word) # Get the new word 

      # If CleanWord didn't return a string, move on 
      if word == None: continue 

      i += 1 
      yield word.lower(), hist.lower(), 1.0 

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

Я получаю ошибку: ValueError: слишком много значений для распаковки (ожидается 2) но я не могу понять, почему. Какие-либо предложения? Код модели cmd Я бегу: python myjob.py Test.txt --mapper

+1

Вы возвращаете 3 значения из 'mapper', тогда как вы можете возвращать только 2. –

+0

Thank. Да, вы правы - функция MapJobs Mapper использует только ключ, значение в качестве выходного. https://pythonhosted.org/mrjob/guides/concepts.html#mapreduce-and-apache-hadoop – user1761806

ответ

1

В работе MapReduce вы выбрали только пару ключей и значений. Для этого вы можете применить следующий тип стратегии: