没有合适的资源?快使用搜索试试~ 我知道了~
MapReduce编程实例:单词计数
12 下载量 90 浏览量
2021-01-07
03:42:25
上传
评论
收藏 74KB PDF 举报
温馨提示
试读
4页
本节介绍如何编写基本的 MapReduce 程序实现数据分析。本节代码是基于 Hadoop 2.7.3 开发的。 任务准备 单词计数(WordCount)的任务是对一组输入文档中的单词进行分别计数。假设文件的量比较大,每个文档又包含大量的单词,则无法使用传统的线性程序进行处理,而这类问题正是 MapReduce 可以发挥优势的地方。 在前面《MapReduce实例分析:单词计数》教程中已经介绍了用 MapReduce 实现单词计数的基本思路和具体执行过程。下面将介绍如何编写具体实现代码及如何运行程序。 首先,在本地创建 3 个文件:file00l、file002 和 file003,文件具体
资源推荐
资源详情
资源评论
MapReduce编程实例:单词计数编程实例:单词计数
本节介绍如何编写基本的 MapReduce 程序实现数据分析。本节代码是基于 Hadoop 2.7.3 开发的。
任务准备任务准备
单词计数(WordCount)的任务是对一组输入文档中的单词进行分别计数。假设文件的量比较大,每个文档又包含大量的单
词,则无法使用传统的线性程序进行处理,而这类问题正是 MapReduce 可以发挥优势的地方。
在前面《MapReduce实例分析:单词计数》教程中已经介绍了用 MapReduce 实现单词计数的基本思路和具体执行过程。下
面将介绍如何编写具体实现代码及如何运行程序。
首先,在本地创建 3 个文件:file00l、file002 和 file003,文件具体内容如表 1 所示。
表表 1 单词计数输入文件单词计数输入文件
文件名文件名 file001 file002 file003
文件内容
Hello world
Connected
world
One world
One
dream
Hello
Hadoop
Hello Map
Hello Reduce
再使用 HDFS 命令创建一个 input 文件目录。
hadoop fs -mkdir input
然后,把 file001、file002 和 file003 上传到 HDFS 中的 input 目录下。
hadoop fs -put file001 input
hadoop fs -put file002 input
hadoop fs -put file003 input
编写 MapReduce 程序的第一个任务就是编写 Map 程序。在单词计数任务中,Map 需要完成的任务就是把输入的文本数据按
单词进行拆分,然后以特定的键值对的形式进行输出。
编写编写 Map 程序程序
Hadoop MapReduce 框架已经在类 Mapper 中实现了 Map 任务的基本功能。为了实现 Map 任务,开发者只需要继承类
Mapper,并实现该类的 Map 函数。
为实现单词计数的 Map 任务,首先为类 Mapper 设定好输入类型和输出类型。这里,Map 函数的输入是 形式,其中,key 是
输入文件中一行的行号,value 是该行号对应的一行内容。
所以,Map 函数的输入类型为 。Map 函数的功能为完成文本分割工作,Map 函数的输出也是 形式,其中,key 是单
词,value 为该单词出现的次数。所以,Map 函数的输出类型为 。
以下是单词计数程序的 Map 任务的实现代码。
public static class CoreMapper extends Mapper {
private static final IntWritable one = new IntWritable(1);
private static Text label = new Text();
public void map(Object key,Text value,Mapper Context context)throws IOException,InterruptedException {
StringTokenizer tokenizer = new StringTokenizer(value.toString());
while(tokenizer.hasMoreTokens()) {
label.set(tokenizer.nextToken());
context.write(label,one);
}
}
}
在上述代码中,实现 Map 任务的类为 CoreMapper。该类首先将需要输出的两个变量 one 和 label 进行初始化。
变量 one 的初始值直接设置为 1,表示某个单词在文本中出现过。
Map 函数的前两个参数是函数的输入参数,value 为 Text 类型,是指每次读入文本的一行,key 为 Object 类型,是指输入的
行数据在文本中的行号。
StringTokenizer 类机器方法将 value 变量中文本的一行文字进行拆分,拆分后的单词放在 tokenizer 列表中。然后程序通过循
环对每一个单词进行处理,把单词放在 label 中,把 one 作为单词计数。
在函数的整个执行过程中,one 的值一直是 1。在该实例中,key 没有被明显地使用到。context 是 Map 函数的一种输出方
式,通过使用该变量,可以直接将中间结果存储在其中。
根据上述代码,Map 任务结束后,3 个文件的输出结果如表 2 所示。
表表 2 单词计数单词计数 Map 任务输出结果任务输出结果
文件名文件名/Map file001/Map1 file002/Map2 file003/Map3
Map 任务输出结果任务输出结果
编写编写 Reduce 程序程序
资源评论
weixin_38653085
- 粉丝: 4
- 资源: 926
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功