WordCount 案例实操

news2024/9/25 19:17:26

文章目录

  • WordCount 案例实操
    • 一、案例需求
    • 二、案例分析
    • 三、代码实现
      • 1、Map阶段代码

WordCount 案例实操

一、案例需求

1、需求:在给定的文本文件中统计输出每一个单词的总次数

2、期望输出数据
atguigu 2
banzhang 1
cls 2
hadoop 1
jiao 1
ss 2
xue 1

二、案例分析

按照MapReduce 编程规范,分别编写 Mapper,Reducer,Driver,如下图所示
在这里插入图片描述
Mapper 只负责切和分:
Mapper首先传入进来是,Text 类型,但是我们对``类型的数据操作不熟悉,所以把它再转换为String类型的进行操作,读取行数据,然后根据空格将这一行的数据进行切分,成两个单词,有空格的才切哈,没得空格就不切。然后将单词输出为<单词,1>,
Reducer 负责汇总:
Rducer 阶段拿到的数据就是,刚刚Map阶段切分好的数据,汇总各个key的个数,比如以 atguigukey的单词,他们就会进入到同一个Reduce方法里面去,然后会将同一个Reduce方法里面的单词,进行汇总,就可以得到这个单词的次数
Driver 运行程序提交作业: 这是固定的程序,基本所有的程序都这么写
获取配置信息,获取job对象实例,指定本程序的jar所在的本地路经,关联Mapper/Reducer业务类,指定Mapper输出类型的KV值类型,指定最终输出的数据的KV类型,指定job的输入原始文件所在目录,指定job的输出结果所在目录,然后最后提交作业

三、代码实现

1、Map阶段代码

package com.aex.mr;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

//map阶段
//KEYIN 第一个参数,输入数据的类型 行偏移量 0-19 然后第二行就是 20-25 第三行26-35 会有一点偏差
//VALAUEIN 第二个参数 输入数据的value Text 也就是String类型,因为读取进来的单词全是文本类型
//KEYOUT 输出数据的类型是KV atguigu,1 ss,1是这个样子的,所以应该设置为 Text IntWritable
//VALUEOUT 输出的数据的value类型 最后这两个是作为Reduce阶段的输入,这两个写什么Reduce的输入类型就写什么
public class WordCountMapper extends Mapper<LongWritable, Text,Text, IntWritable> { //第一个泛型是数据的类型,
    Text k = new Text();
    IntWritable v = new IntWritable(1);
    @Override  //每次key/value都会调用一次,输入的切片,必须要重写这个map方法
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //LongWritable kye 和Mapper类的LongWritable对应,是行偏移量。Text value和Text对应是输入数据的类型值
        //atguigu atguigu 一次只读取一行数据,第一次是第一行,就把这个atguigu读进来了
        //ss ss
        // 1 获取一行,他是Text类型,我们的给他转换成String类型的
        String line = value.toString(); //我们吧这个value使用tostring方法转换成string类型
        // 2 然后中间是有空格的,我们得根据空格进行切割单词
        String[] words = line.split(" ");//直接使用split方法进行切割,中间直接是空格,
        //然后切割完的结果返回一个数组,比如数组第一个就是第一个atguigu 然后数组第二个就是第二个atguigu
        // 3 循环写出
        for (String word:words){ //循环遍历这个数组,
            //atguigu 因为这个对象要是写在循环里的话每次都要创造一个对象有点耗内存,所以写在外面当全局变量一样的,但是我不删,注释了放在这里容易看懂
            //Text k = new Text(); //因为下面的context.write方法写入,然后key是Text类型的,所以new一个新的变量对象
            k.set(word); //然后把这个数组放进去.atguigu atguigu
            //1
            //IntWritable v = new IntWritable(); //值value是IntWritable类型的,也要new 一个新的变量对象,然后把他们两个传入进去就行了
            //v.set(1); //k是设置的单词。那么v就是1 然好map阶段的任务完成,数据输出变成atguigu,1 atguigu 1
            context.write(k,v); //使用context.write方法写出去,两个参数key,value。以单词为key,单词的数量为value
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java和springboot开发祭祀小程序扫墓系统代祭小程序

介绍 绿色祭祀小程序&#xff0c;用户微信授权登录后可以发布纪念馆&#xff08;祭祀名人&#xff0c;祭祀英烈&#xff0c;祭祀个人&#xff0c;可以设置成公开状态或者隐私状态&#xff09;购买祭祀礼物和留言&#xff0c;用户还可以发布代祭的信息 演示视频 小程序 https:…

计算机毕业设计ssm+vue基本微信小程序的购物商城小程序

项目介绍 随着互联网的趋势的到来,各行各业都在考虑利用互联网将自己的信息推广出去,最好方式就是建立自己的平台信息,并对其进行管理,随着现在智能手机的普及,人们对于智能手机里面的应用购物平台小程序也在不断的使用,本文首先分析了购物平台小程序应用程序的需求,从系统开发…

Spark SQL执行计划到RDD全流程记录

目录 0、样例说明 1、解析词义&#xff0c;语义&#xff0c;生成语法树 1.1、概念 1.2、根据样例跟踪Spark代码 2、Unresolved Logical Plan 3、Analyzed Logical Plan 源码 SessionCatalog Analyzer Rule Batch 对比 4、Optimized Logical Plan 5、Physical Plan …

vue3组件基础,组件引用与使用、向子组件传递数据与事件prop、emit

vue3组件基础&#xff0c;组件引用与使用、向子组件传递数据与事件prop、emit 一、组件模板 组成&#xff1a;template(必要)&#xff0c;script&#xff0c;style 例子&#xff1a;模板名称 Hello.vue <template><div class"msgStyle">{{ msg }}</di…

Java项目:ssm校园在线点餐系统源码

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 系统主要分为前台和后台&#xff0c;分为管理员与普通用户两种角色&#xff1b; 前台主要功能有&#xff1a;用户注册、用户登录、我的购物车、…

大学生零基础学编程要多久呢

众所周知现在的程序员都是高薪工作&#xff0c;很多人会通过自学或培训去获得一些编程知识&#xff0c;那“学编程需要什么基础呢&#xff1f;” 编程培训已经成为了很多大学毕业生缓解就业压力的一种方式&#xff0c;毕业之后找一份高薪工作是许多大学生最基本想法&#xff0…

【学习打卡03】可解释机器学习笔记之CAM类激活热力图

可解释机器学习笔记之CAM类激活热力图 文章目录可解释机器学习笔记之CAM类激活热力图CAM介绍CAM算法原理GAP全局平均池化GAP VS GMPCAM算法的缺点及改进CAM可视化同张图&#xff0c;不同类别不同图&#xff0c;同个类别CAM弱监督定位用语义特征编码进行分类CAM各种有意思的应用…

Linux系统中DDR3硬件初始化实验

大家好&#xff0c;我是ST。 今天的话&#xff0c;主要和大家聊一聊&#xff0c;如何使用Cortex-A芯片自带的RAM&#xff0c;很多时候要运行Linux的话是完全不够用的&#xff0c;必须要外接一片RAM芯片&#xff0c;驱动开发板上的DDR3。 目录 第一&#xff1a;何为RAM和ROM …

为什么要学习Python爬虫与数据可视化?

提到Python爬虫与数据可视化&#xff0c;我们都不陌生。因为我们早已身在大数据驱动的时代&#xff0c;数据分析已然成为了一项必备技能。可能有人会问&#xff0c;为什么要学习Python爬虫与数据可视化&#xff1f; 答案是显而易见的&#xff0c;无论是出于时代发展的要求&…

redis之如何支持秒杀场景

写在前面 本文一起看下Redis在秒杀场景中的应用。 1&#xff1a;秒杀都有哪些阶段 redis并非在秒杀的所有阶段都需要使用到&#xff0c;为了更好的了解redis在秒杀场景中的应用&#xff0c;我们先来看下秒杀的不同阶段&#xff0c;基本可以分为秒杀前&#xff0c;秒杀进行时&…

什么是用户增长? (超详细)

一.概况 原因&#xff1a;随着人口红利的衰减&#xff0c;互联网流量红利的马太效应显现&#xff0c;这意味着成本的大幅度增加&#xff0c;企业必须改变过去粗放型的营销和运营方式&#xff0c;用更高效更低成本实现快速增长 定义&#xff1a;通过实验和数据驱动&#xff0c…

5.Linux实用操作

文章目录零、学习目标一、软件安装1、Linux系统的应用商店2、yum命令3、apt命令 - 扩展二、systemctl命令三、软连接四、下载和网络请求1、ping命令2、wget命令3、curl命令五、端口1、概念2、查看端口占用六、进程管理1、概念2、查看进程3、查看指定进程4、关闭进程七、主机状态…

SAP ABAP 开发管理 代码增强标记 位置使用清单(Mark of enhancement)

SAP ABAP 开发管理 代码增强标记 位置使用清单&#xff08;Mark of enhancement&#xff09; 引言&#xff1a; 代码增强标记 &#xff08;Mark of enhancement&#xff09;是我在 ABAP 开发中对增强管理的方法之一&#xff0c;是对 SAP 系统增强管理工具的补充。通过对代码增…

自学Python找不到工作?只要掌握这七大块,月薪15K轻轻松松

1. 开发环境和开发工具 python3.6下载 Download Python sublime Text 3 Sublime Text - Download pycharm下载 PyCharm :: Download Latest Version of PyCharm 2. python语法知识 个人推荐《Python从入门到实践》、《Python编程快速上手》 3. web框架 djangoh中文文档 D…

九、Docker 复杂安装之mysql主从复制

前面我们介绍了Docker 安装单机版mysql,如果没有看可以先看下:https://blog.csdn.net/u011837804/article/details/128315385 本篇学习的前提是懂得mysql主从复制的原理,话不多说,我们开始。 1、下载mysql5.7镜像 涉及命令: 查看本地镜像命令:docker images拉取mysql5…

最近邻 M 点

一 问题描述 在 K 维空间中有很多点&#xff0c;给定一个点&#xff0c;找出最近的 M 个点。点 p 和点 q 之间的距离是连接它们的直线段的长度。 二 输入和输出 1 输入 有多个测试用例。第 1 行包含两个非负整数 n 和 k &#xff0c;分别表示点数和维数&#xff0c;1≤n≤5…

Python: unittest框架

目录 1.0 接口自动化框架设计 2.0 分层设计框架 3.0 接口配置文件 3.1 测试用例数据 4.0 框架执行入口 4.1 测试函数 4.1.1 参数替换 4.1.2 发送请求处理 4.1.3 响应断言 4.1.4 提取全局变量 4.1.5 数据库断言 5.0 工具类 5.1.1 excel文件处理 5.1.2 数…

直呼内行阿里离职带出内网专属“高并发系统设计”学习笔记

前言 我们知道&#xff0c;高并发代表着大流量&#xff0c;高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案&#xff0c;从而抵抗巨大流量的冲击&#xff0c;带给用户更好的使用体验。这些方案好似能操纵流量&#xff0c;让流量更加平稳得被系统中的服务…

python 之 pandas数据处理

目录 一&#xff1a;读取文件 二&#xff1a;查看数据 三&#xff1a;获取数据 四&#xff1a;按标签选择 五&#xff1a;按照位置选择 六&#xff1a;布尔索引 七&#xff1a;缺失值 一&#xff1a;读取文件 read_csv 加载文件 df pd.read_csv("classify.csv&quo…

SPRING-了解2-XML

两种bean Spring中有两种bean:一种普通bean,另外一种工厂bin (Factory Bin&#xff0c;注意不是前面说的BeanFactory类) 普通Bean:xml中定义什么类型返回的就是什么类型 <bean id"book" class"com.i7i8i9.spring5.collectiontype.Book"> xml中clas…