【问题标题】:Hadoop - look for matching names in two customer listsHadoop - 在两个客户列表中查找匹配的名称
【发布时间】:2013-05-13 23:46:51
【问题描述】:

我有两张来自不同活动的人员名单;我想在这些列表中寻找匹配的人名,以及匹配的公司。我知道每个列表中可能会有同名的人不是同一个人,但这将有助于找到匹配项。

第一个列表示例
姓名、公司、职务
John Doe,ACME 公司,大象训练师
简·史密斯,ACME Corporation,首席执行官
John Smith,Widgets-R-Us,清洁工
+10,000 行

第二个列表示例:
名称,公司
ACME 公司的 Fred Smith
John Smith,Widgets-R-Us
约翰·史密斯,XYZ 公司
Jane Smith,XYZ 公司
+10,000 行

所需的输出
匹配名称:
约翰·史密斯
简·史密斯

匹配公司:
ACME 公司
小部件-反斗城

我在 AWS 环境中运行它,并且是 Hadoop 的新手。任何编程语言都可以。我知道如何在 Excel 中执行此操作,但希望能够随着时间的推移使用更多名称列表(每个名称都在自己的 CSV 文件中)来扩展它。

【问题讨论】:

  • 你试过什么?您不能完全要求 SO 上的人为您构建一个完整的 hadoop 应用程序 - 自己试一试,如果您在此过程中遇到具体问题,请回来,我们将很乐意提供帮助。我建议尝试使用 java 中的 hadoop 字数统计教程来开始。
  • 谢谢。我使用了 AWS 示例字数。我将这两个列表合并到一个没有其他列的文件中,并从名称中删除了所有空格(看起来像 FirstnameLastName)。这给了我最常出现的名字的计数,这足够接近以获取顶级名字并进行手动搜索后记。我很难弄清楚如何调整字数样本,我想我只需要更多的挖掘来理解它的所有部分。一旦我让它的沙盒工作,我猜我将能够与其他人一起玩。谢谢。
  • 有没有人有一个很好的链接,可以从 AWS 示例 wordcount 模型转到将代码驻留在可以修改的地方?再次感谢您!

标签: hadoop merge match


【解决方案1】:

您需要一个 Mapper 实现,在其中您将 Name 和 Company Name 作为 Text 和 IntWritable 发出。
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException{ /*Some logic to derive the person name or the Company name.*/ String name = value.split(',')[0]; context.write(new Text(value),new IntWritable(1)); }

Reducer 中 reduce 方法的实现类似于
public void reduce(Text key, Iterable<IntWritable> values,Context context)throws IOException, InterruptedException{ int count = 1; for(IntWritable val: values){count++;} //You would all the unique names with no of times it is repeated. context.write(key,new IntWritable(count)); }
希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2013-08-12
    • 2014-02-24
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 2020-02-17
    • 2015-05-23
    相关资源
    最近更新 更多