MapReduce Python, не могу передать критерии для текстового файла

1

Прежде всего, я очень новичок в MapReduce (только на этой неделе) и делаю это как часть курса, который я сейчас нахожу, так что простите меня, если я делаю основные ошибки.

Я попытался найти ответ на мою проблему, но я нахожу что-то актуальное.

У меня есть текстовый файл строк, где данные просты, например:

Reg1, Yes
Reg2, No
Reg3, Yes
Reg4, Yes
Reg5, Yes
Reg6, Yes
Reg7, Yes
Reg8, No
Reg9, Yes
Reg10, Yes
Reg11, Yes
Reg12, Yes
Reg13, Yes
Reg14, No
Reg15, Yes

Первое, что я хотел сделать, это считать "да" и "нет" - эта часть работает нормально, но с использованием второй модели для перевода слов "reg" в текстовый файл, если это "Нет". Я где-то читал, в этой ситуации лучше смотреть на строки, а не на слова, что имеет смысл.

Ниже приведена моя попытка получить картограф, который делает это:

import sys

for line in sys.stdin:

line = line.strip()

lines = line.split()

for line in lines:
    if 'Yes' in line:
        sys.stdout.write('%s\t%s\n' % (line,1))

    else:
        sys.stderr.write('%s\t%s\n' % (line,1))

    print('%s\t%s' % (line, 1))

но в результате получается:

Reg1,   1
Reg2,   1
No  1
Reg3,   1
Reg4,   1
Reg5,   1
Reg6,   1
Reg7,   1
Reg8,   1
No  1
Reg9,   1
Reg10,  1
Reg11,  1
Reg12,  1
Reg13,  1
Reg14,  1
No  1
Reg15,  1

тогда как я хочу, чтобы мой результат был следующим:

Reg2, No
Reg8, No
Reg14, No

Может ли кто-нибудь указать указатель на то, где я ошибаюсь? Эта часть работы предназначена только для теоретических целей, поэтому я использую Python (плюс это то, что продемонстрировал преподаватель)

Заранее спасибо.

  • 0
    sys.stderr.write('%s\t%s\n', % (line, 1)) всегда заменяет первый %s на line а второй - только на int 1 . Вероятно, хорошая идея начать там с вашего вывода. Второе, что вы должны сделать, это убедиться, что line действительно содержит информацию, которую вы ищете.
Теги:
mapreduce

1 ответ

0
Лучший ответ

Не нужно разделять строки на слова. Оператор in может идентифицировать подстроку внутри строки.

и тогда вам также не нужно делать такую печать, в конечном итоге ваш код будет

import sys

for line in sys.stdin:
    line = line.strip()
    if 'Yes' in line:
        # print(line) # we don't want to print the Yes lines
        pass
        # but if we want to leave the IF unchanged, then a pass instruction needs to fill it
    else:
        print(line)
        # if you want results to be pipe-able, comment line above, uncomment line below
        #sys.stdout.write(line)
  • 0
    Это сработало префект. Большое спасибо. Когда я смотрю на это, имеет смысл просто пройти черту, если да есть. Еще раз спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню