java mapreduce 实例_MapReduce -- JAVA 实例(一)计算总数

本文介绍了如何使用Java实现MapReduce程序来分析专利引用数据。首先讲解了MapReduce的基本概念和流程,接着展示了一个具体的MapReduce程序,包括Mapper和Reducer的实现,用于统计专利被引用的情况。通过上传数据到HDFS,运行并解析结果,最终得到每个专利被引用的总数。
摘要由CSDN通过智能技术生成

MapReduce

===========================

将任务细化,让不同的节点处理不同部分。处理完后,再把各自的结果进行统一。它通过键值对来处理数据。但键和值的类型都有要求。

通过JAVA编写的 MapReduce 程序中。值的类型必须实现了 Writable, 因为它是要被写入文件中的。而实现了

WritableComparable

接口的类,即可以是键也可以是值。因为它是可写的,所以可以是值;而它又是可进行比较的,所以作为键。

一个可执行的 MapReduce JAVA 程序应该包括如下内容:

1.一个 main 方法,用来定义整个流程,接收的参数等。

2.定义 Mapper, 定义如何划分数据生成的值也是键值对形式。

3.定义 Reducer, 定义如何处理结果。最后生成的值也是键值对形式。

4.定义一个 Job, 将 Mapper, Reducer 等必要的值设置进去。

MapReduce 通过操作 键/值 对来处理数据,一般形式是:

map: 将 (K1, V1) 的输入转化成 list(K2, V2) 的输出

reduce: 将 (K2, list(V2)) 的输入转化成 list(K3, V3) 的输出

比如,一个网络游戏,有多个区,而角色又分几个种族。这时要分析每个区每个种族分别有多少。

整个分析的输入就是所有的这些数据,可能是数据库数据,CVS 形式的数据表。

经过 Map 方法后,数据分析任务分配给不同的 DataNode 。每个 DataNode 上的数据可能是:A区 X 族:

5W 人; A区 Y 族: 6W 人; B 区 X 族 4W 人...

当然,这些数据是 键/值 对形式存储的。

然后,这些数据再经过一个被称为洗牌的过程,将不同种族的 键/值 对放到不同的 DataNode 上。

再经过 Reduce, 得到最终结果:X 族 8W; Y 族: 6W 当然,结果形式还是 键/值 对。

Mapper

-----------------------------------------------------

Mapper 的定义是由一个类来实现的。它必须继承 MapReduceBase 基类并实现 Mapper 接口。

Mapper 只有一个方法:map.用于处理单独的键值对。运行的时候键值对是由 Task

传递过来的。所以这里只需要定义如何处理就行,不用关心谁调用。

Reducer

-----------------------------------------------------

Reducer 的定义是由一个类来实现的。它必须继承 MapReduceBase 基类并实现 Reducer

接口。

当 Reducer 任务接收来自各个 mapper

的输出时,它按键值对中的键,对数据进行排序,并将相同的值的值归并。然后调用 reduce() 方法。

案例:专利引用计算

************************************************************************

http://www.nber.org/patents/ 上有专利相关的数据。我们构造 MapReduce

程序来分析相关的结果。

选用该数据是因为该案例的数据结构和当前一些社会网络图差不多,数据形式较普遍。

专利引用数据集

http://www.nber.org/patents/acite75_99.zip

专利描述数据集:

http://www.nber.org/patents/apat63_99.zip

[root@localhost mapreduce1]# wget

http://www.nber.org/patents/acite75_99.zip

[root@localhost mapreduce1]# wget

http://www.nber.org/patents/apat63_99.zip

[root@localhost mapreduce1]# unzip

acite75_99.zip

[root@localhost mapreduce1]# unzip apat63_99.zip

[root@localhost mapreduce1]# cat cite75_99.txt | wc -l

16522439

[root@localhost mapreduce1]# cat apat63_99.txt | wc -l

2923923

专利引用数据有 16522439 条。专利描述有 2923923 条。

[root@localhost mapreduce1]# head -n 5

cite75_99.txt

"CITING","CITED"

3858241,956203

3858241,1324234

3858241,3398406

3858241,3557384

上面显示的是专利之间的引用关系。每行表示一条数据。前面的数字是专业号,后面是被引用的专利号。所以上面的数据可以看到,3858241

引用了 其它的四个专利。当然后面还有很多数据,这其实就是一个多对多的关系。

[root@localhost mapreduce1]# head -n 5

apat63_99.txt

"PATENT","GYEAR","GDATE","APPYEAR","COUNTRY","POSTATE","ASSIGNEE","ASSCODE","CLAIMS","NCLASS","CAT","SUBCAT","CMADE","CRECEIVE","RATIOCIT","GENERAL","ORIGINAL","FWDAPLAG","BCKGTLAG","SELFCTUB","SELFCTLB","SECDUPBD","SECDLWBD"

3070801,1963,1096,,"BE","",,1,,269,6,69,,1,,0,,,,,,,

3070802,1963,1096,,"US","TX",,1,,2,6,63,,0,,,,,,,,,

3070803,1963,10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值