Манипулирование моделью ReduR () MapReduce - PullRequest
0 голосов
/ 10 октября 2018

Я работал над простой программой для подсчета слов, которая при вводе текста печатает количество вхождений каждого слова.

Функция уменьшения выглядит следующим образом:

def reducer(self, word, count):
    yield(word, sum(count))

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

Теперь яхотите настроить функцию redu () так, чтобы в выходной файл выводились только те слова, которые встречаются в количестве 10 или более.Я думал, это может выглядеть так:

def reducer(self, word, count):
   if sum(count)>10:
        emit(word,sum(count))

Однако это не работает.Вместо этого выходной файл печатает 0 по каждому слову.Я почти уверен, что функция reducer () нуждается в настройке, а не в функции map.Тем не менее, я не могу думать ни о чем, кроме как, если заявление.Буду очень признателен за совет.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

count - это итерация, и вы повторяете ее дважды, во второй раз, когда она пуста, и сумма будет равна нулю.

Вам нужно сохранить результат, затем проверить и вывести.В противном случае логика верна

def reducer(self, word, count):
   _count = sum(count)
   if _count > 10:
       emit(word, _count)
0 голосов
/ 10 октября 2018

Вы можете попробовать что-то в строке этого:

def threshold(x, y, n=10):
    return True if y >= n else False

filter(threshold, reducer)
...