Я получаю сообщение об ошибке: ValueError: недостаточно значений для распаковки (ожидалось 2, получено 1).В чем может быть проблема? - PullRequest
0 голосов
/ 11 февраля 2019

Я выполняю задание mapreduce, но оно продолжает давать сбой, говоря, что отсутствует ввод.К сожалению, он не показывает, где его нет.

from mrjob.job import MRJob
from mrjob.step import MRStep
import re

class flight_combination(MRJob):
    def steps(self):
        return [MRStep(mapper=self.mapper_1,reducer=self.reducer_1)]

    def mapper_1(self,_,value):
        group1 = {}
        group2 = {}
        parts = value.split(",")
        destination = parts[0]
        origin = parts[1]
        count = parts[2]
        group1[destination] = {'Origin': origin, 'count': count}
        group2[origin] = {'Destination':destination,'count':count}
        yield group1
        yield group2

    def reducer_1(self,key,value):
        g1,g2 = data
        for key1 in g1:
            for key2 in g2:
                if g1[key1]['Origin'] == g2[key2]['Destination']:
                    total = int(g1[key1]['count'])*int(g2[key2]['count'])
                yield (key1,key2,total)

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

Ниже приведена ошибка:

`File "wd.py", line 35, in <module>
   flight_combination.run()
…...
  File "/usr/lib/python3.6/site-packages/mrjob/job.py", line 536, in run_mapper
    for out_key, out_value in mapper(key, value) or ():
ValueError: not enough values to unpack (expected 2, got 1)`

1 Ответ

0 голосов
/ 11 февраля 2019

Метод run типа объекта flight_combination имеет значение , ожидая 2 аргумента, но предоставляется с 1 аргументом .(Python по умолчанию принимает self в качестве первого аргумента для методов, вызываемых для объекта)

Чтобы исправить это -

  1. , поскольку метод run определен в родительском классе,пройдите его определение и передайте другой аргумент.
  2. Переопределите метод run, переопределив его flight_combination class и предоставьте свою логику.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...