我一直在研究使用 MapReduce 构建一个并行化的记录组合系统。语言无关紧要,我可以使用预先存在的库,例如 Hadoop,或者在必要时构建自己的库,我并不担心。
然而,我一直遇到的问题是我需要在多个条件上匹配记录。例如:我可能需要根据人名或人的电话号码匹配记录,但不一定是人名和电话号码。
例如,给定每条记录的以下键:
- “约翰·史密斯”和“555-555-5555”
- “简·史密斯”和“555-555-5555”
- “约翰史密斯”和“555-555-1111”
我希望系统获取所有三个记录,找出它们在其中一个键上匹配,并将它们组合成一个包含两个名称(“John Smith”和“Jane Smith”)以及两个电话号码的组合记录(“555-555-5555”和“555-555-1111”)。
这是我可以使用 MapReduce 完成的事情吗?如果是这样,我将如何匹配 Map 函数生成的键,以便所有匹配的记录都可以传递到 Reduce 函数中。*或者,有没有不同/更好的方法可以做到这一点?我唯一真正的要求是我需要它并行化。
[*] 请注意:我假设 Reduce 函数的使用方式是,每次调用 Reduce 函数都会产生一个组合记录,而不是 Reduce 函数会为整个作业产生一个结果。