【问题标题】:How to calculate the average number from a text file with MRJob如何使用 MRJob 从文本文件中计算平均数
【发布时间】:2019-01-09 11:52:43
【问题描述】:

我是 MrJob 的初学者,在从素数文本文件中计算平均素数时遇到了麻烦。我不确定在哪个部分应用算术逻辑,以及在使用 MrJob 时是否应该产生列表。 文本文件包含一百万个素数,这是我到目前为止提出的,我不明白我的情况下的键值应该是什么。

%%writefile prime_average.py
from mrjob.job import MRJob

class primeAverages(MRJob):

def mapper(self, _, line):
    results = []
    for x in line.split():
        if(x.isdigit()):
            yield x, 1

def reducer(self, word, key):
    yield word, sum(word)/len(key)

【问题讨论】:

  • 您的输入文件是如何组织的?每个素数都在单独的一行吗?
  • 在映射器中,您必须将素数作为值并使用像 1 这样的公共键作为值,因为对应于相同键的值被传递给同一个减速器并且您想要它们多合一减速机!虽然在我看来,以这种方式使用 MRJob 除了学习 MRJob 基础知识之外没有任何优势!

标签: python mapreduce mrjob


【解决方案1】:

你可以使用类似的东西:

def mapper(self, _, line):
    if line.isdigit():
        yield (None, int(line))

def reducer(self, key, values):
    s = 0 #sum of primes
    c = 0 #number of primes
    for p in values:
        s += p
        c += 1
    yield (None, s / c)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多