专栏首页大数据No.67 Hadoop 实践案例——记录去重

No.67 Hadoop 实践案例——记录去重

转载声明

本文为灯塔大数据原创内容,欢迎个人转载至朋友圈,其他机构转载请在文章开头标注:转自:灯塔大数据;微信:DTbigdata

编者按:灯塔大数据将每周持续推出《从零开始学大数据算法》的连载,本书为哈尔滨工业大学著名教授王宏志老师的扛鼎力作,以对话的形式深入浅出的从何为大数据说到大数据算法再到大数据技术的应用,带我们在大数据技术的海洋里徜徉~每周五定期更新

上期回顾&查看方式

在上一期,我们学习了“Hello World”程序的相关内容。PS:了解了上期详细内容,请在自定义菜单栏中点击“灯塔数据”—“技术连载”进行查看;或者滑到文末【往期推荐】查看。

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 写到结果中。

下期精彩预告

本文来自企鹅号 - 灯塔大数据媒体

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 有向无环图检测

    01 — Spark背景介绍 Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark 是一种与 Hadoop 相似的开源集群计算环...

    企鹅号小编
  • JDBC原理浅析,当达到一定层级后,回头看这些当初的细节

    JDBC,你还记得她的全称是啥么?中文几个意思? 今儿咱再回来拉练一把当初的JDBC! JDBC原理浅析,当达到一定层级后,回头看这些当初的细节,真的入门后,也...

    企鹅号小编
  • 从数据看零售行业的五大趋势

    传统零售行业过去是“许三多”——客户多、商品多、门店多。到今天还要加上一多——数据多。互联网的发展及电商的井喷使零售行业在2016年遭受了闭店潮,但即使在实体、...

    企鹅号小编
  • 每周学点大数据 | No.67 Hadoop 实践案例——记录去重

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

    灯塔大数据
  • 化秋毫为波澜:运动放大算法(深度学习版)

    运动放大(Motion Magnification),将视频中对应位置的运动进行放大,简单理解的话,就是找到时间段内的运动矢量,进行放大,然后权值叠加回去。

    SIGAI学习与实践平台
  • Idea Usage of API documented as @since 1.4

    这个错误的产生原因是代码中使用了@since 1.4, 标记代码只能在jdk 1.4 之后的版本中才能使用,但是项目的编译环境在 1.4 之前,所以idea 给...

    Dylan Liu
  • 基于 Docker 分分钟搭建起 Golang 开发环境

    虽然 Golang 的开发环境相对容易搭建,但是使用 docker 的优势是能方便的切换 golang 的版本,而且开发环境对开发时所使用的机器没有任何的依赖,...

    姚俊刚
  • 数据工程师的崛起

    大数据文摘
  • Zoom客户端漏洞允许黑客窃取用户Windows密码

    Zoom开发至今,已经九年了。在冠状病毒流行期间,人们迫切需要一个易于使用的视频会议应用程序,因此,Zoom在一夜之间成为数百万人所青睐的工具。

    FB客服
  • 如何将HTML表格转换成精美的PDF

    包含表格、图表和图形的 Web 应用程序通常包含将数据导出为 PDF 的选项。你有没有想过,作为一个用户,当你点击那个按钮时,幕后发生了什么?

    张张

扫码关注云+社区

领取腾讯云代金券