【发布时间】:2014-11-24 12:29:41
【问题描述】:
用例:
我有 2 个数据集/文件集机器(父)和警报(子)。
他们的数据也存储在两个 avro 文件中,即 machine.avro 和 alert.avro。
警报架构具有 machineId:列类型 int。
如果也依赖于警报,我如何过滤来自机器的数据? (一对多)。
例如获取警报时间在 2 个时间戳之间的所有机器。
任何例如有源代码会有很大帮助...
提前谢谢...
【问题讨论】:
用例:
我有 2 个数据集/文件集机器(父)和警报(子)。
他们的数据也存储在两个 avro 文件中,即 machine.avro 和 alert.avro。
警报架构具有 machineId:列类型 int。
如果也依赖于警报,我如何过滤来自机器的数据? (一对多)。
例如获取警报时间在 2 个时间戳之间的所有机器。
任何例如有源代码会有很大帮助...
提前谢谢...
【问题讨论】:
在另一个帖子中得到答案....
Mapping through two data sets with Hadoop
从该线程发布 cmets...
根据文档,MapReduce 框架包括以下步骤:
Map
Sort/Partition
Combine (optional)
Reduce
您已经描述了一种执行连接的方法:将所有 Set A 加载到每个 Mapper 的内存中。你说得对,这是低效的。
相反,如果两个集合都按键排序和分区,则可以将一个大连接划分为任意多个较小的连接。 MapReduce 在上面的步骤 (2) 中通过 key 对每个 Mapper 的输出进行排序。排序后的 Map 输出然后按 key 分区,以便每个 Reducer 创建一个分区。对于每个唯一键,Reducer 将接收来自 Set A 和 Set B 的所有值。
要完成你的连接,Reducer 只需要从 Set B 中输出 key 和更新的 value,如果它存在的话;否则,从 Set A 输出 key 和原始值。为了区分 Set A 和 Set B 的值,请尝试在 Mapper 的输出值上设置一个标志。
【讨论】: