当前位置: 首页 > 知识库问答 >
问题:

如何输出键,值对,以便1小时内的时间最终在MapReduce中使用Python的化简器中?

邓韬
2023-03-14

我需要处理一个非常大的文本文件,格式如下:

ID \t time \t duration \t Descripthtml" target="_blank">ion \t status

我想利用MapReduce来帮我处理这个文件。我知道MapReduce基于键、值对工作。Mapper将输出键和一些值,MapReduce将确保所有相同的键都出现在1个reducer中。

我想在缩减器中结束的是有时间的行,它们之间的时间间隔在1小时以内。然后在reducer中,我想访问所有其他信息,如ID、持续时间、状态等,以做其他事情。所以我猜要输出的值是一个列表什么的?

我有一些Python代码来处理输入数据。mapper.py

#!/usr/bin/env python
import sys
import re
for line in sys.stdin:
   line=line.strip()
   portions=re.split(r'\t+',line)
   time=portions[1]
#output key,value by print to stdout for reducer.py to read in.

请注意,我的数据集中的时间已经是POSIX时间格式。

我该如何在Mapper中输出键/值对来做到这一点呢?

我对MapReduce/Hadoop还是很陌生,感谢所有的帮助。提前感谢!

共有1个答案

梁鸣
2023-03-14

这里有一个策略:

>

  • 从Mapper:发出每个记录的三个副本并使用辅助排序:

    ((复合键),值)=

    • ((消息小时-一小时,当前消息的精确时间),消息)
    • ((消息小时,消息的精确时间),消息)
    • ((消息小时一小时,准确的消息时间),消息)

    现在:您需要标准二次排序:

    • set分区程序只到密钥的前半部分(消息小时)
    • setGrouping比较器只到密钥的前半部分(消息小时)
    • setSorting比较器到(消息小时,消息的精确时间)

    在缩减器中:每个缩减器组在消息的精确时间的- 60到120分钟内接收所有消息。缩减器以排序的顺序看到所有的“消息的精确时间”。因此,您可以在每个reducer中保持一个滑动窗口,显示过去60分钟内查看的所有邮件

    注意,以上假设60分钟的消息数据可以容纳在单个reducer任务的内存中。否则,您需要将数据写到磁盘上,作为窗口功能的一部分。

    更新操作要求进一步澄清窗口,所以我们来了。

    从映射器发出的键的角度考虑:每个输入记录有三个键。现在在Reducer上,这意味着每个输入记录出现在三个不同的组中。其原因是我们需要考虑每个输入记录的超前和滞后记录。现在,每个组都可以访问最早记录60分钟内以及最新记录60分钟内的所有输入记录。因为记录是按每小时最早的一秒来分组的:这意味着-60(最小)到120(最大)与属于给定小时组的任何记录相比。

  •  类似资料:
    • 问题内容: 在Hadoop MapReduce中,对于中间输出(由map()生成),我希望中间输出的值成为以下对象。 我该怎么做。我应该创建自己的可写类吗? 我是MapReduce的新手。 谢谢。 问题答案: 您可以编写自定义类型,将其作为映射器值发出。但是无论您要发出什么值,都必须实现可写接口。您可以执行以下操作: 另外,您可以使用Avro序列化框架。

    • 问题内容: 如何在0(1)时间复杂度的任何时间从队列中检索max和min元素?早些时候,我使用Collections.max和min查找元素,但这将是0(n)。 问题答案: 您只有2种方法来获得最小/最大操作的O(1): 如果结构已排序,并且您知道最大值/最小值位于何处 如果结构未排序且仅允许插入:每次插入项目并分别存储值时,您可以重新计算最小值/最大值 如果结构未排序并且允许插入和删除:我认为您

    • 问题内容: 用户项目的亲和力和建议: 我正在创建一个表,建议“购买此商品的客户也购买了算法” 输入数据集 需要输出 该代码在示例数据集上运行良好,但是 该代码花费的时间太长,无法在包含100,000行的数据集中运行。请帮助我优化代码。 问题答案: 此处的关键是创建productId的笛卡尔积。参见下面的代码, 方法2

    • 嗨,我写了一个mapreduce作业,它一般解析XML文件。我能够解析XML文件并正确生成所有键值对。我有6个不同的键和相应的值。所以我并行运行6个不同的减速器。 现在我面临的问题是,reducer将两个不同的键 - 值对放在同一个文件中,其余4个键值放在单个文件中。因此,简而言之,在化简器输出的6个文件中,我得到了4个具有单键值对的文件和1个具有两个键值对的文件以及1个没有任何内容的文件。 我尝

    • 问题内容: 给定一个结构 当像这样编组 结果是 所需的结果是 我已经尝试过明确指出Abn是一个字符串。 并没有改变结果。 如何编组sql.NullString以便将输出展平以仅给出go中的值? 编辑 在阅读了答案后,我最终得到了类似的结果 问题答案: 这是代码, 这是博客文章,详细解释了它。