如何在MRBup中获取文本中的平均单词数



我在mrjob mareduce框架中遇到了一个简单的问题: 我想在给定的Parragraph中获取平均单词数,我得到了这个:

class LineAverage(MRJob):
def mapper(self, _, line):
    numwords = len(line.split())
    yield "words", numwords
    yield "lines", 1

def reducer(self, key, values):
    yield key, sum(values)

使用此代码,我得到了reduce过程,文本中行和单词的总和,但我不知道如何通过执行以下操作获得平均值:

words/TotalOfLines

我是这种编程模型的新手,如果有人可以说明这个例子,将不胜感激。

同时,非常感谢您的关注和参与

毕竟,答案很简单:我实际上向化简器发送了等于行数的值。因此,在化简器中,我只需要计算键的值数。

class LineAverage(MRJob):
def mapper(self, _, line):
    numwords = len(line.split())
    yield "words", numwords

def reducer(self, key, values):
    i,totalL,totalW=0,0,0
    for i in values:
        totalL += 1
        totalW += i     
    yield "avg", totalW/float(totalL)

因此映射器为每行发送一对("words",x),洗牌过程将产生一个元组:("words":x1,x2,x3,..xnumberOfLines),这是化简器的输入,然后我只需要计算键的值数,就是这样,我得到了行数。

希望对某人有帮助。

在 reducer 中,您已经将键 sum(values) 输出到输出文件。您只需要将输出文件读取到Java/Scala程序中并计算平均值即可。

相关内容

  • 没有找到相关文章

最新更新