Parallel processing 多键并行记录合并匹配
我一直在考虑使用MapReduce构建一个并行记录合并系统。语言不重要,我可以使用Hadoop等已有的库,或者在必要时构建自己的库,我不担心这一点 然而,我一直遇到的问题是,我需要根据多个条件匹配记录。例如:我可能需要根据姓名或电话号码匹配记录,但不一定是姓名和电话号码 例如,为每个记录提供以下键:Parallel processing 多键并行记录合并匹配,parallel-processing,distributed,mapreduce,Parallel Processing,Distributed,Mapreduce,我一直在考虑使用MapReduce构建一个并行记录合并系统。语言不重要,我可以使用Hadoop等已有的库,或者在必要时构建自己的库,我不担心这一点 然而,我一直遇到的问题是,我需要根据多个条件匹配记录。例如:我可能需要根据姓名或电话号码匹配记录,但不一定是姓名和电话号码 例如,为每个记录提供以下键: “约翰·史密斯”和“555-555-5555” “简·史密斯”和“555-555-5555” “约翰·史密斯”和“555-555-1111” 我希望系统获取所有三条记录,找出它们在其中一个键上匹配,
[*]请注意:我假设Reduce函数的使用方式是,每次调用Reduce函数都会生成一个组合记录,而不是Reduce函数为整个作业生成一个结果。我不认为Map在这里有用,因为您不能为每个记录创建一个有意义的键来帮助识别记录的分组 使用Reduce也不可能实现此功能。想想你自己给的例子…如果查询“Jane Smith”,则无法检测到第一条记录与查询相关,因此将忽略它。事实上,你可以把名字和数字链接在一起,直到你得到文件中的每一条记录。获取所有匹配项的唯一方法是迭代扫描列表,直到您停止查找新链接
这是非常容易并行化的,你只需要在一些线程之间共享记录,每个线程都可以搜索自己的记录来寻找新的链接。我建议将这些集合视为数据环,这样您就可以使用最新的信息记录您正在搜索的点,并且在所有线程完成一个完整的循环后,您就知道您已经完成了。您完全可以在map/reduce范例中这样做 假设您正在匹配任何包含“smith”或以“555”开头的电话号码的内容。例如,您可以将搜索字符串规范化为“smith ^^555”。在映射阶段,您将执行以下操作:
- 约翰·史密斯/555-555-5555→ K:smith ^^555,V=(约翰·史密斯,555-555-5555)
- 无名氏/555-555-5555→ K:smith |^555,V=(无名氏,555-555-5555)
- 约翰·史密斯/555-555-1111→ K:smith ^^555,V=(约翰·史密斯,555-555-1111)