【问题标题】:Grouping joined data in Hadoop map-reduce在 Hadoop map-reduce 中对连接数据进行分组
【发布时间】:2014-04-09 16:26:01
【问题描述】:

我有两种不同类型的文件,一种是用户列表。它具有以下结构: 用户 ID、姓名、国家 ID

第二种是订单列表: OrderID、UserID、OrderSum

每个用户都有很多订单。我需要编写map-reduce hadoop作业(在java中)并接收具有以下结构的输出: CountryID、NumOfUsers、MinOrder、MaxOrder

编写两个不同的映射器(针对每种文件类型)和一个 reducer 以便通过 UserID 连接两个文件中的数据并接收以下结构对我来说不是问题: UserID、CountryID、UsersMinOrder、UsersMaxOrder

但我不明白如何按 CountryID 对数据进行分组?

【问题讨论】:

  • 我的书“MapReduce 设计模式”的无耻插件。它有一整章关于连接,告诉你如何实现它们。 (抱歉没给你答复,时间长了,我现在没时间)
  • 为什么需要它在 Java 中?为什么不使用像猪这样的东西呢? (顺便说一下,Donald 的书对于常见的 map/reduce 问题以及如何解决它们确实是一个很好的参考)
  • @DonaldMiner 谢谢你会读你的书。
  • @ArnonRotem-Gal-Oz 这是我的学习任务,我应该不使用 Pig 或任何其他工具来解决它。

标签: java join hadoop mapreduce


【解决方案1】:

我建议通过 Pig 或 Hive 运行此程序,因为您只需几行即可解决此类问题。

如果做不到这一点,我会做以下事情。对连接的数据运行另一个 MapReduce 作业,并执行以下操作:在您的映射器中,对于每个输入拆分,请密切关注每个国家 ID 处理的最小顺序、最大顺序和元组(具有唯一用户 ID 的行)的数量。只有少数几个国家,因此您可以在整个地图作业中将这些统计数据保存在内存中。在拆分结束时,将累积的统计信息输出到以国家 ID 为键的减速器。然后,reducer 简单地组合来自每个拆分的聚合数据以找到全局最大值、最小值和计数。

【讨论】:

  • 这是我学习中的一个任务,我应该在不使用 Pig 或任何其他工具的情况下解决它。它应该由一个 map-reduce 作业完成,因此我不能在我的连接数据上运行另一个作业。
  • 其实你是对的,我只是链接了两个 map-reduce 作业并解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
相关资源
最近更新 更多