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