【问题标题】:Filtering AVRO Data from 2 datasets从 2 个数据集中过滤 AVRO 数据
【发布时间】:2014-11-24 12:29:41
【问题描述】:

用例:

我有 2 个数据集/文件集机器(父)和警报(子)。
他们的数据也存储在两个 avro 文件中,即 machine.avro 和 alert.avro。

警报架构具有 machineId:列类型 int。

如果也依赖于警报,我如何过滤来自机器的数据? (一对多)。

例如获取警报时间在 2 个时间戳之间的所有机器。

任何例如有源代码会有很大帮助...

提前谢谢...

【问题讨论】:

    标签: hadoop mapreduce avro


    【解决方案1】:

    在另一个帖子中得到答案....

    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 的输出值上设置一个标志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      • 2017-10-12
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多