Как подсчитать, сколько раз последовательность слов появляется в файле, используя MapReduce в Python?

Рассмотрим файл, содержащий слова, разделенные пробелами; написать программу MapReduce на Python, которая подсчитывает, сколько раз каждая последовательность из трех слов появляется в файле.

Например, рассмотрим следующий файл:

one two three seven one two three
three seven one
seven one two

Количество раз, когда каждая последовательность из 3 слов появляется в этом файле:

"three seven one" 2
"four seven one two" 1
"one two three" 2
"seven one two" 2
"two three seven" 1

Формат кода:

from mrjob.job import MRJob


class MR3Nums(MRJob):
    
    def mapper(self,_, line):
        pass

    def reducer(self,key, values):
        pass
    

if __name__ == "__main__":
    MR3Nums.run()

person John Whitehouse    schedule 10.04.2021    source источник


Ответы (1)


Преобразователь применяется к каждой строке и должен подсчитывать каждую последовательность из 3 слов, т. е. выдавать последовательность из 3 слов вместе со счетчиком, равным 1.

Редуктор вызывается с помощью key и values, где key — последовательность из 3 слов, а values — список счетчиков (который будет списком единиц). Редуктор может просто вернуть кортеж последовательности из 3 слов и общее количество вхождений, последнее получается через сумму.

class MR3Nums(MRJob):
    
    def mapper(self, _, line):
        sequence_length = 3
        words = line.strip().split()
        for i in range(len(words) - sequence_length + 1):
            yield " ".join(words[i:(i+sequence_length)]), 1

    def reducer(self, key, values):
        yield key, sum(values)
person Anson Miu    schedule 10.04.2021
comment
Спасибо за ответ. Код аккуратный и проницательный. - person John Whitehouse; 10.04.2021
comment
Пожалуйста. Если это решило ваш вопрос, отметьте его как правильный ответ. - person Anson Miu; 10.04.2021