Прежде всего, я очень новичок в 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 (плюс это то, что продемонстрировал преподаватель)
Заранее спасибо.
Не нужно разделять строки на слова. Оператор 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)
sys.stderr.write('%s\t%s\n', % (line, 1))
всегда заменяет первый%s
наline
а второй - только на int1
. Вероятно, хорошая идея начать там с вашего вывода. Второе, что вы должны сделать, это убедиться, чтоline
действительно содержит информацию, которую вы ищете.