- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法使用mrjob对reducer函数的输出进行排序?
我认为 reducer 函数的输入是按键排序的,我尝试利用此功能使用另一个 reducer 对输出进行排序,如下所示,我知道值具有数值,我想计算每个键的数量并排序根据此计数的键:
def mapper_1(self, key, line):
key = #extract key from the line
yield (key, 1)
def reducer_1(self, key, values):
yield key, sum(values)
def mapper_2(self, key, count):
yield ('%020d' % int(count), key)
def reducer_2(self, count, keys):
for key in keys:
yield key, int(count)
但它的输出没有正确排序!我怀疑这种奇怪的行为是由于将 int
s 操作为 string
并试图将其格式化为 this link说但是没用!
重要提示:当我使用调试器查看 reducer_2
的输出顺序时,该顺序是正确的,但作为输出打印的却是另一回事!!!
重要提示 2:在另一台计算机上,相同数据的相同程序返回按预期排序的输出!
最佳答案
您可以在第二个 reducer 中将值排序为整数,然后将它们转换为零填充表示:
import re
from mrjob.job import MRJob
from mrjob.step import MRStep
WORD_RE = re.compile(r"[\w']+")
class MRWordFrequencyCount(MRJob):
def steps(self):
return [
MRStep(
mapper=self.mapper_extract_words, combiner=self.combine_word_counts,
reducer=self.reducer_sum_word_counts
),
MRStep(
reducer=self.reduce_sort_counts
)
]
def mapper_extract_words(self, _, line):
for word in WORD_RE.findall(line):
yield word.lower(), 1
def combine_word_counts(self, word, counts):
yield word, sum(counts)
def reducer_sum_word_counts(self, key, values):
yield None, (sum(values), key)
def reduce_sort_counts(self, _, word_counts):
for count, key in sorted(word_counts, reverse=True):
yield ('%020d' % int(count), key)
嗯,这是在内存中对输出进行排序,这可能是一个问题,具体取决于输入的大小。但是你希望它被排序,所以它必须以某种方式排序。
关于python - MRJob 排序 reducer 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53707962/
我尝试从 mrjob 中的映射器输出 python 集。我相应地更改了组合器和 reducer 的函数签名。 但是,我收到此错误: Counters From Step 1 Unencodable o
默认情况下,mrJob 以 key[tab] 输出格式存储输出中的键和值。 即使键(或值)为空、null 或其他不感兴趣的情况,也会发生这种情况。假设我的键值对是 None, {"a":1", "b"
我正在尝试更好地理解 mrjob 的示例 from mrjob.job import MRJob class MRWordFrequencyCount(MRJob): def mapper(
我正在尝试预处理 XML 文件以在放入 mapreduce 之前提取某些节点。我有以下代码: from mrjob.compat import jobconf_from_env from mrjob.
我正在使用 cloudera 虚拟机。这是我的文件结构: [cloudera@quickstart pydoop]$ hdfs dfs -ls -R /input drwxr-xr-x - clo
显示多步 map reduce 作业执行时间的最佳方式是什么? 我试图在工作的step1 的mapper init 中设置一个self 变量 def mapper_init_timer(sel
我正在尝试学习将 Yelp 的 Python API 用于 MapReduce、MRJob。他们的简单单词计数器示例很有意义,但我很好奇人们将如何处理涉及多个输入的应用程序。例如,不是简单地计算文档中
如何在 mrjob 的 reducer 或映射器中放置调试语句(如打印)。如果我尝试使用 print 或 sys.stderr.write(),我会收到一个错误 TypeError: a bytes-
我使用 hadoop 流式传输的 mrjob 失败。我在 oracle vm 上有一个带有 python 模块 mrjob 的 hadoop 沙箱。 需要按照 Hadoop Error: Error
我是 map reduce 的新手,我正在尝试使用 mrjob 运行 map reduce 作业python包。但是,我遇到了这个错误: ERROR:mrjob.launch:Step 1 of 1
如果我对 MRJob 的理解正确,你可以通过运行 MRJob 来模拟 hadoop 的多进程运行 python mrfile.py -r local input.txt 我正在运行 Windows(现
我一直在尝试修改给定的 mapper_pre_filter 示例 here .现在,如果我不直接在步骤中指定命令,而是编写一个返回该命令的方法,如下所示: from mrjob.job import
我正在尝试在 EMR 集群中运行示例 mrjob。我已在 AWS 仪表板中手动创建 EMR 集群并启动 mrjob,如下所示 python keywords.py -r emr s3://common
我正在尝试通过三个步骤来实现映射缩减作业,并且在每个步骤之后我都需要迄今为止所有步骤的数据。有谁有关于如何在 mrjob 中将映射器或 reducer 的结果保存到磁盘的示例/想法? 最佳答案 您可以
我对 Map/Reduce 原理和 python mrjob 框架还很陌生,我写了这个示例代码,它工作正常,但我想知道我可以改变它什么以使其“完美”/更高效. from mrjob.job impor
我正在使用 MrJob 编写 hadoop 应用程序。我需要使用分布式缓存来访问一些文件。我知道 hadoop 流中有一个选项 -files 但不知道如何在程序中访问它。 感谢您的帮助。 最佳答案 我
我正在使用 mrjob 处理一批文件并获取一些统计信息。我知道我可以在单个文件上运行 mapreduce 作业,例如 python count.py output 但是我怎样才能将文件目录提供给脚本
有没有办法使用mrjob对reducer函数的输出进行排序? 我认为 reducer 函数的输入是按键排序的,我尝试利用此功能使用另一个 reducer 对输出进行排序,如下所示,我知道值具有数值,我
场景是我需要处理一个文件(输入),对于每条记录,我需要检查输入文件中的某些字段是否与存储在 Hadoop 集群中的字段匹配。 我们正在考虑使用 MRJob 处理输入文件并使用 HIVE 从 hadoo
我想这样索引化简的结果: 1 "EZmocAborM6z66rTzeZxzQ" 2 "FIk4lQQu1eTe2EpzQ4xhBA" 3 "myql3o3x22_ygECb8gVo7A"
我是一名优秀的程序员,十分优秀!