前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每周学点大数据 | No.67 Hadoop 实践案例——记录去重

每周学点大数据 | No.67 Hadoop 实践案例——记录去重

作者头像
灯塔大数据
发布2018-04-04 11:30:00
7070
发布2018-04-04 11:30:00
举报
文章被收录于专栏:灯塔大数据

No.67

Hadoop 实践案例——记录去重

Mr. 王:现在我们看一个和 WordCount 很相似,在实际中应用也很多的例子——记录去重。

小可 :嗯,从字面上理解就是将重复的数据记录去除吧?

Mr. 王 :是的,就是如此。这个工作在实际的应用中是非常常见的,在进行数据管理时,不论是录入记录错误,还是新旧数据的原因,都是非常容易出现重复的记录的。很多时候,重复的记录会对我们进行个数统计等操作产生影响,造成统计结果错误。另外,出现重复记录的数据集合可能会非常大,单靠人工挑重,或者是靠简单的单机去查找会比较慢,所以我们要尝试借助并行机制来解决这个问题。

下面给出一些输入输出的例子。

比如现在有一些通讯录文件

我们希望合并这些通讯录文件,去掉其中重复的数据,将它变成如下这样不含重复记录的数据 :

你来想一想这个问题可以怎么解决?

小可 :嗯……也不能用每一个数据到整个数据集合里面查找啊,这样效率岂不是太低了。在很多数据库中,都有很多手段来防止重复数据的出现,比如主键机制。它作为唯一识别数据的标识,是不允许出现重复的。

Mr. 王启发道 :想一想之前我们学过哪个例子?

小可顿时恍然大悟 :对了,这个工作其实跟WordCount 很像啊!我们只要对所有的记录进行计数,然后再去掉这个计数就可以了!

Mr. 王 :很好,其实仔细想想,记录去重这个工作和 WordCount 是非常相似的。不过记录去重我们可以做的更加简单。第一,我们关注的是记录,而不是单词,所以无须对记录进行单词切分,只需要把整条记录当作一个数据项就可以了。其实这样做也是有必要的,因为很多时候,在电话簿里面具有相同名字的记录并不一定有着相同的电话号码。这就意味着,只有两条完全相同的记录才是重复记录,所以我们使用整条记录作为关键词去重,反而省去了切分单词的操作。第二,在记录去重的工作中,我们并不关心重复记录出现了几次,直接合并它们就可以了,所以完全可以不去设置记录出现数量的计数器。至于在 WordCount 中那个 (word,1) 中的1,我们随意填写一个数据就可以,一般用空字符串就行,这样比较节省存储空间。

小可 :嗯,似乎比 WordCount 更简单了一些。

Mr. 王 :好了,我们来看看实现它的源代码。

Mr. 王 :前面和后面的部分这里就不多说了,可以看作是实现类似的 Hadoop 操作的固定格式。当然,其实其中的内容也是非常容易识别的,Java 以完整的单词进行类和对象命名的特点使得类和操作的识别变得非常容易,可以很容易地读懂。我们重点来看看对 Map 和 Reduce两个基本操作的设计。

首先来看 Map 的设计。

在新版本 Hadoop 的标准 API 中,Map 是 Mapper 基类的派生类。我们先定义一个派生于Mapper 的 Map 类。

然后定义一个 map 函数,设计接收的 key-value 对的形式。

从接收到的来自文本的数据记录中将其提取出来作为一个新的变量。

在新版本的 API 中,我们使用 context 来表示要发出(emit)的数据记录。在这里我们将接收到的数据作为 key,而 value 就像前面说过的那样,填写一个空值就可以了。

接下来是 reduce 类,它同样派生于 Reducer 基类。

在 reduce 这个函数中,我们定义 Reduce 的基本操作,在这里要接收 map 发出的键值对。虽然 value 并没有意义的,但我们依然要像有 value 那样生成一个 values 列表来接收大量的空串。

不过在这个 Reduce 中,我们并不执行任何操作,只是将接收到的 key 写到结果中。

下期精彩预告

经过学习,我们研究了记录去重涉及到的一些具体问题。在下一期中,我们将进一步了解Hadoop 实践案例——等值连接的相关内容。更多精彩内容,敬请关注灯塔大数据,每周五不见不散呦!

文章作者:王宏志

文章编辑:田芳

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 灯塔大数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档