首页 > 其他分享 >10

10

时间:2023-06-09 23:03:14浏览次数:38  
标签:10 String Mapper WordCount value 单词 key

10.WordCount示例编写(一)

任务目的

  • 理解 WordCount 示例的业务逻辑
  • 掌握 MapReduce Map 端编程规范
  • 理解 WordCount 示例 Map 端的自定义业务逻辑的编写

任务清单

  • 任务1:WordCount 的业务逻辑
  • 任务2:WordCount Map 端程序编写

详细任务步骤

任务1:WordCount 的业务逻辑

  MapTask 阶段处理每个数据分块的单词统计分析,思路是将每一行文本拆分成一个个的单词,每遇到一个单词则把其转换成一个 key-value 对,比如单词 Car,就转换成<’Car’,1>发送给 ReduceTask 去汇总。

  ReduceTask 阶段将接收 MapTask 的结果,按照 key 对 value 做汇总计数。

Vditor

图1

任务2:WordCount Map 端程序编写

  回顾 MapReduce Map 端编码规范:

  1. 用户自定义的 Mapper 需要继承父类 Mapper
  2. Mapper 的输入数据是 KV 对的形式(KV 的类型可自定义)
  3. Mapper 的输出数据是 KV 对的形式(KV 的类型可自定义)
  4. Mapper 中的业务逻辑写在 map() 方法
  5. MapTask 进程对每一个<K,V>调用一次map()方法

  接下来进入 WordCount Map 端程序的编写,eclipse 成功连接到 Hadoop 集群后,选择“File”->“New”->“Project”->“Map/Reduce Project”创建名为 MyMR 的项目名,在此项目下创建名为com.hongyaa.mr的包名,在此包下创建名为 WordCountMapper.java 的类,如下图所示:

Vditor

图2

  首先编写 Map 端编程框架,自定义的 WordCountMapper 需要继承父类 Mapper,输入数据和输出数据都是KV 对的形式。具体框架代码如下:

public class WordCountMapper extends Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT> {

}
  • KEYIN:是指框架读取到的数据的key的类型,在默认的InputFormat下,读到的key是一行文本的起始偏移量,所以key的类型是Long,对应 Hadoop 中的 LongWritable
  • VALUEIN:是指框架读取到的数据的value的类型,在默认的InputFormat下,读到的value是一行文本的内容,所以value的类型是String,对应 Hadoop 中的 Text
  • KEYOUT:用户自定义逻辑方法返回数据中key的类型,由用户业务逻辑决定,在此WordCount程序中,我们输出的key是单词,所以是String,对应 Hadoop 中的 Text
  • VALUEOUT:用户自定义逻辑方法返回数据中value的类型,由用户业务逻辑决定,在此WordCount程序中,我们输出的value是单词的数量,所以是Integer,对应 Hadoop 中的 IntWritable

  将框架中的KV对对应的类型修改完成后的代码如下所示:

public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {

}

  已知 Mapper 中的业务逻辑写在 map() 方法中,在此 map()方法中我们需要实现的是将读取到的每一行文本拆分成一个个的单词,每遇到一个单词则把其转换成一个 key-value 对,比如单词 Car,就转换成<’Car’,1>发送给 ReduceTask 去汇总。具体代码如下所示:

@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
	//(1)将MapTask传给我们的文本内容先转换成String
	String line = value.toString();  
	//(2)根据空格将这一行切分成单词
	String[] words = line.split(" ");
	//(3)将单词输出为<单词,1>
	for (String word : words) {
		//将单词作为key,将次数1作为value,以便后续的数据分发,可以根据单词分发,将相同单词分发到同一个ReduceTask中
		context.write(new Text(word), new IntWritable(1));
	}
}

  WordCountMapper.java 的完整代码如下所示:

public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
	/**
	 * Map阶段的业务逻辑需写在自定义的map()方法中
	 * MapTask会对每一行输入数据调用一次我们自定义的map()方法
	 */
	@Override
	protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
		//(1)将MapTask传给我们的文本内容先转换成String
		String line = value.toString();  
		//(2)根据空格将这一行切分成单词
		String[] words = line.split(" ");
		//(3)将单词输出为<单词,1>
		for (String word : words) {
			// 将单词作为key,将次数1作为value,以便后续的数据分发,可以根据单词分发,将相同单词分发到同一个ReduceTask中
			context.write(new Text(word), new IntWritable(1));
		}
	}
}

标签:10,String,Mapper,WordCount,value,单词,key
From: https://www.cnblogs.com/Cuckoo123456/p/17470438.html

相关文章

  • Linux 4.10 将带来深远影响的三项小改变
    Linux的演进永不停歇。LinusTorvalds一直在努力工作,希望能够在新的内核版本当中(4.11)融入更多变化。不过在目前的Linux4.10中,我们同样发现了三组能够有效提升性能并实现多种前所未有功能集的变更。Linux的演进永不停歇。LinusTorvalds一直在努力工作,希望能够在新的内核......
  • windows10安装ubuntu双系统教程
    windows10安装ubuntu双系统教程资料windows10安装ubuntu双系统教程https://blog.csdn.net/Scarlett2025/article/details/119894316https://blog.csdn.net/weixin_37110403/article/details/126814513https://blog.csdn.net/weixin_42697074/article/details/88880185Window......
  • Atcoder ARC100D Equal Cut
    发现是\(3\)个断点且数据范围的\(n\le2\times10^5\),根据2022CSP-SA留下的心理阴影不难想到可以枚举中间的那个点的同时移动左右两个端点。考虑如何移动,已知现在在枚举中间的断点\(i\),则现在被分为了两部分\(1\simi\)和\(i\simn\),因为要使极差最小,那就先可以让每一......
  • Luogu B2105 矩阵乘法(模板)
    矩阵乘法题目描述计算两个矩阵的乘法。\(n\timesm\)阶的矩阵\(A\)乘以\(m\timesk\)阶的矩阵\(B\)得到的矩阵\(C\)是\(n\timesk\)阶的,且\(C[i][j]=A[i][0]\timesB[0][j]+A[i][1]\timesB[1][j]+\)……\(+A[i][m-1]\timesB[m-1][j](C[i][j]\)表示\(C\)......
  • 闲话 Day10
    已经是第10期了。总体来说还是很高产的吧(?)然而,写闲话是需要大量思考的吧。而最近比较困,所以啥也没想,或者说至少除了学术以外啥也没想。然后才想起来,我要写的是闲话,不是什么大众读物。不需要有什么主题,不需要有大致内容或者方向。就随便写一写漫天乱逛可能更像是一篇闲话吧......
  • Windows10输入法失效!!!
    总有朋友会遇到这样的问题:Windows10自带的输入法无法切换中英文输入!Windows10的输入法没办法输入中文,即便安装如搜狗输入法等其他输入法也不行!输入法之间无法切换!大体来说,就是如上的类似的症状。网络有很多方法:重启电脑的~搜狗输入法的修复器来修复啊~~控制面板的语言栏......
  • 基于XC7Z100+OV5640(DSP接口)YOLO人脸识别前向推理过程(部分2)
    认识神经网络1.认识神经网络中的神经元神经网络是模仿生物神经网络的结构和功能的数学模型或计算模型,由大量的节点或称神经元相互连接构成。神经元是神经网络的基本成分,它接收来自其他神经元的输入信号,通过权重、偏置和激活函数来产生输出信号。权重(weight)是表示输入信号的......
  • MDT部署Windows系列 (十二): 进阶篇—制作完美的Win10 22H2系统镜像模板之移除Windows
    前言由于工作等原因(借口),距离发布上一篇MDT系列的文章已经过去一年::twemoji:sweat::上一章我记录了基于MDT如何使用一个Task即可实现制作Windows基础wim镜像+DIY基础软件+捕捉镜像。传送门有好多同学一直咨询在制作捕捉镜像的时候遇到的常见的2个问题:如何彻底的移除掉Windows10中......
  • 代码随想录算法训练营第十七天|● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404
    110.平衡二叉树力扣题目链接(opensnewwindow)给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例1:给定二叉树[3,9,20,null,null,15,7]返回true。示例2:给定二叉树[1,2,2,3,3,nu......
  • 不用循环和条件判断打印1-1000
    //z不用循环和条件判断打印1-1000//z2011-05-2419:16:07@is2120#include<iostream>template<intN>structNumberGeneration{staticvoidout(std::ostream&os){NumberGeneration<N-1>::out(os);os<<N<&......