如何使用python中的mapreduce计算单词序列在文件中出现的次数?

tpgth1q7  于 2021-07-13  发布在  Hadoop
关注(0)|答案(1)|浏览(508)

考虑一个包含用空格分隔的单词的文件;用python编写mapreduce程序,计算每个3字序列出现在文件中的次数。
例如,考虑以下文件:

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()
ctrmrzij

ctrmrzij1#

Map器应用于每一行,并且应该对每个3字序列进行计数,即产生3字序列,同时计数为1。
减速器称为 key 以及 values ,在哪里 key 是一个3字序列 values 是一个计数列表(应该是一个1的列表)。reducer可以简单地返回3字序列的一个元组和出现的总次数,后者通过sum获得。

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)

相关问题