【云计算与大数据计算】Hadoop MapReduce实战之统计每个单词出现次数、单词平均长度、Grep(附源码 )

news2024/11/27 8:46:15

需要全部代码请点赞关注收藏后评论区留言私信~~~

下面通过WordCount,WordMean等几个例子讲解MapReduce的实际应用,编程环境都是以Hadoop MapReduce为基础

一、WordCount

WordCount用于计算文件中每个单词出现的次数,非常适合采用MapReduce进行处理,处理单词计数问题的思路很简单,在 Map阶段处理每个文本split中的数据,产生<word,1> 这样的键-值对,在Reduce阶段对相同的关键字求和,最后生成所有的单词计数 。

运行示意图如下

运行结果如下 

 二、WordMean

对上面例子的代码稍作修改,改成计算所有文件中单词的平均长度,单词长度的定义是单词的字符个数,现在HDFS集群中有大量的文件,需要统计所有文件中所出现单词的平均长度。

三、Grep

还是进行大规模文本中单词的相关操作,现在希望提供类似Linux系统中的Grep命令的功能,找出匹配目标串的所有文件,并统计出每个文件中出现目标字符串的个数。

在 Map阶段根据提供的文件split信息、给定的每个字符串输出 <filename,1> 这样 的键-值对信息

在 Reduce阶段根据filename对 Map阶段产生的结果进行合并

运行效果如下

 四、代码

部分代码如下 全部代码请点赞关注收藏后评论区留言私信~

package alibook.odps;

import java.io.IOException;
import java.util.Iterator;

import com.aliyun.odps.data.Record;
import com.aliyun.odps.data.TableInfo;
import com.aliyun.odps.mapred.JobClient;
import com.aliyun.odps.mapred.MapperBase;
import com.aliyun.odps.mapred.ReducerBase;
import com.aliyun.odps.mapred.conf.JobConf;
import com.aliyun.odps.mapred.utils.InputUtils;
import com.aliyun.odps.mapred.utils.OutputUtils;
import com.aliyun.odps.mapred.utils.SchemaUtils;

public class wordcount {

  public static class TokenizerMapper extends MapperBase {
    private Record word;
    private Record one;

    @Override
    public void setup(TaskContext context) throws IOException {
      word = context.createMapOutputKeyRecord();
      one = context.createMapOutputValueRecord();
      one.set(new Object[] { 1L });
      System.out.println("TaskID:" + context.getTaskID().toString());
    }

    @Override
    public void map(long recordNum, Record record, TaskContext context)
        throws IOException {
      for (int i = 0; i < record.getColumnCount(); i++) {
        word.set(new Object[] { record.get(i).toString() });
        context.write(word, one);
      }
    }
  }

  /**
   * A combiner class that combines map output by sum them.
   **/
  public static class SumCombiner extends ReducerBase {
    private Record count;

    @Override
    public void setup(TaskContext context) throws IOException {
      count = context.createMapOutputValueRecord();
    }

    @Override
    public void reduce(Record key, Iterator<Record> values, TaskContext context)
        throws IOException {
      long c = 0;
      while (values.hasNext()) {
        Record val = values.next();
        c += (Long) val.get(0);
      }
      count.set(0, c);
      context.write(key, count);
    }
  }

  /**
   * A reducer class that just emits the sum of the input values.
   **/
  public static class SumReducer extends ReducerBase {
    private Record result = null;

    @Override
    public void setup(TaskContext context) throws IOException {
      result = context.createOutputRecord();
    }

    @Override
    public void reduce(Record key, Iterator<Record> values, TaskContext context)
        throws IOException {
      long count = 0;
      while (values.hasNext()) {
        Record val = values.next();
        count += (Long) val.get(0);
      }
      result.set(0, key.get(0));
      result.set(1, count);
      context.write(result);
    }
  }

  public static void main(String[] args) throws Exception {
    if (args.length != 2) {
      System.err.println("Usage: WordCount <in_table> <out_table>");
      System.exit(2);
    }

    JobConf job = new JobConf();

    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(SumCombiner.class);
    job.setReducerClass(SumReducer.class);

    job.setMapOutputKeySchema(SchemaUtils.fromString("word:string"));
    job.setMapOutputValueSchema(SchemaUtils.fromString("count:bigint"));

    InputUtils.addTable(TableInfo.builder().tableName(args[0]).build(), job);
    OutputUtils.addTable(TableInfo.builder().tableName(args[1]).build(), job);

    JobClient.runJob(job);
  }

}

pom.xml文件代码如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>alibook</groupId>
  <artifactId>odps</artifactId>
  <version>0.0.1</version>
  <packaging>jar</packaging>

  <name>odps</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    
    <dependency>
      <groupId>com.aliyun.odps</groupId>
      <artifactId>odps-sdk-core</artifactId>
      <version>0.23.3-public</version>
    </dependency>
    
    <dependency>
      <groupId>com.aliyun.odps</groupId>
      <artifactId>odps-sdk-commons</artifactId>
      <version>0.23.3-public</version>
    </dependency>
  
    <dependency>
      <groupId>com.aliyun.odps</groupId>
      <artifactId>odps-sdk-mapred</artifactId>
      <version>0.23.3-public</version>
    </dependency>
  
  </dependencies>
</project>

创作不易 觉得有帮助请点赞关注收藏~~~

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

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

相关文章

描述统计 | 学习笔记 (全)

一.导论 统计学是通过收集&#xff0c;整理&#xff0c;分析&#xff0c;描述数据等手段&#xff0c;以达到推断所测对象的本质&#xff0c;甚至预测对象未来的一门综合性科学。其目的是探索数据的内在数量规律性&#xff0c;以达到对客观事物的科学认识 统计的本业是消化数据…

一种近红外I区荧光染料ICG-CBT 主要应用领域,是药品监督管理局(FDA)批准的体内应用染料

英文名称:ICG-CBT 保存条件:-20℃ 产品类别:化学试剂 结构式&#xff1a; 产品描述&#xff1a;&#xff08;ICG&#xff09;是一种近红外I区荧光染料[1]&#xff0c;是药品监督管理局&#xff08;FDA&#xff09;批准的体内应用染料。其激发和发射波长分别在785 nm、810 nm…

【C++初阶7-stringOJ】上手用一下

前言 本期通过几道OJ题&#xff0c;上手用用string。 1. 把字符串转换成整数 描述 将一个字符串转换成一个整数&#xff0c;要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0 数据范围&#xff1a;字符串长度满足0 ≤ n ≤100 进阶&am…

【读书笔记】万物原理——打开客观世界与主观情感的大门

被尹烨老师推荐种草的&#xff0c;以为是一本讲生命科学的科普书&#xff0c;看上了又以为是说量子物理等高端科学研究的&#xff0c;最后被互补性理论惊到了。这哪里只是一本打开认知客观世界的大门&#xff0c;还让我重识内心。那些看不见摸不着的情感&#xff0c;比如同情心…

数字孪生十大问题有哪些?通俗解释指的是什么?

数字孪生&#xff08;Digital Twins&#xff09;之火热&#xff0c;已经成为了一个不争的事实。数字孪生的概念&#xff0c;起源于制造业&#xff0c;现在已广泛应用到了智慧城市、智慧交通、智慧农业、智慧医疗、智能家居等行业。数字孪生十大问题有哪些&#xff1f;指的是什么…

018 | 服饰颜色与族群名称对颜色认知的影响 | 大学生创新训练项目申请书 | 极致技术工厂

研究目的 本项目以瑶、壮、汉三个民族、六个族群为研究对象&#xff0c;通过七个实验探索服饰颜色与族群名称对颜色认知的影响。重点提出以下两个问题&#xff1a; &#xff08;1&#xff09;服饰颜色是否影响少数民族个体的颜色偏好&#xff1f; &#xff08;2&#xff09;服…

刷完 300 道 LeetCode 题后,我膨胀到要飘起来了!纯正 Java 版

算法题就好像科举考试时代背的八股文&#xff0c;是知识改变命运的代表作。你不刷&#xff0c;不管是校招还是社招&#xff0c;就很过算法题这一关。 我整理的这份 LeetCode 刷题笔记足足 300 道&#xff0c;对算法薄弱和需要提高算法的同学很有帮助。 随便打开一道题解感受下…

【云原生】监视Docker桌面的容器内存和CPU使用情况

目录 一、如何监视Docker桌面的容器内存和CPU使用情况 1、stats命令 2、Docker 统计命令stats是如何工作的 2.1、命令与描述 2.2、OPTIONS 2.3、例子 2.4、格式化 3、满足资源使用扩展 4、如何安装“资源使用情况”扩展插件&#xff1f; 5、总结 一、如何监视Docker桌…

SQL记录

DateDiff函数 定义和用法 DATEDIFF() 函数返回两个日期之间的天数。 语法 DATEDIFF(date1,date2) date1 和 date2 参数是合法的日期或日期/时间表达式。 注释&#xff1a;只有值的日期部分参与计算。 实例 下面是 SELECT 语句&#xff1a; SELECT DATEDIFF(‘2008-11-30’,‘2…

WinRar去除弹窗广告的学习和研究

不可否认WinRar是一款优秀的解压缩软件&#xff0c;尤其是在Windows中使用还是较频繁的。 但是使用时弹出&#xff1a; 这就有点难受了。 那么怎么解决呢&#xff1f;好吧&#xff0c;以学习和研究为目的开始折腾...... 经过对WinRar不同版本的试用&#xff0c;原来这个弹窗是…

ubuntu修改网易云音乐分辨率显示

问题 网易云音乐不能随着系统显示的缩放比自动调整&#xff0c;分辨率较高的显示器上界面显示特别小。只能通过如下的办法解决&#xff1a; ubuntu修改网易云音乐分辨率显示&#xff0c;也就是修改显示 DPI 。 方法 sudo vim /usr/share/applications/netease-cloud-music.d…

12月12日

centos7查找java在哪&#xff0c;which java确认环境变量是否生效&#xff0c;可以输出一下&#xff1a;echo $JAVA_HOME同一个github账号上的所有的项目只需配置一次私钥和公钥&#xff0c;私钥和公钥的作用是你本机ip和这个账户所在github约定的一个对接方式&#xff0c;配置…

微服务框架 SpringCloud微服务架构 分布式事务 38 动手实践 38.5 实现AT 模式

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 分布式事务 文章目录微服务框架分布式事务38 动手实践38.5 实现AT 模式38.5.1 实现 AT 模式38 动手实践 38.5 实现AT 模式 38.5.1 实现 AT…

docker部署mysql问题汇总

部署命令 注意conf文件在实际容器中的位置&#xff0c;有的版本是直接在/etc目录下&#xff0c;可以先创建一个容器进去看看 docker run --restartalways --privilegedtrue \ -v $PWD/mysql/data/:/var/lib/mysql \ -v $PWD/mysql/logs/:/var/log/mysql \ -v $PWD/mysql/con…

Shell脚本学习指南(七)——产生脚本

文章目录前言路径查找软件构建自动化前言 本篇&#xff0c;我们将进一步处理更复杂的工作。我们认为这里举出的例子都是一般用得到的工具&#xff0c;它们每一个都截然不同&#xff0c;且在大多数UNIX工具集里也没有。 在篇中的程序&#xff0c;包括命令行参数分析、在远程主…

电气数据|IEEE118(含风能太阳能)

1 概述 在本科或者研究生写论文时&#xff0c;经常需要用到很多数据&#xff0c;所以数据显得尤为重要。 下面这段文字&#xff0c;为了字数需要&#xff0c;所以可以忽略。 现代这种“探索、征服”的心态&#xff0c;从世界地图的演变可以看得一目了然。早在历史进到现代之前…

猿如意中的【PyCharm社区版】工具详情介绍

猿如意中的【PyCharm社区版】工具详情介绍&#xff0c;手把手教你使用猿如意下载、安装和配置【PyCharm社区版】&#xff0c;希望能帮助到有需要的童鞋。 文章目录前言一、猿如意介绍二、PyCharm社区版开发工具简介1.【PyCharm专业版】和【PyCharm社区版】的功能区别2.【PyChar…

新兴新能源设施[1]--盐穴压缩空气储能相关配套设施

新兴新能源设施[1]--盐穴压缩空气储能相关配套设施前言1. 什么是盐穴压缩空气储能&#xff1f;2. 盐穴储气的相关应用案例2.1 江苏常州应用案例2.2 衡阳压缩空气储能项目2.3 山东肥城10MW盐穴压缩空气储能系统3. 气-液、油-水界面信息探测和信息传输3.1 中子寿命测试油水界面&a…

一种近红外区荧光染料:ICG-Tetrazine,ICG-TZ,在影像医学,光热 等都会有一定的应用

凯新生物一种近红外区荧光染料&#xff0c;Cy系列&#xff08;花菁类&#xff09;染料&#xff08;630-670 nm、650-700 nm&#xff09;&#xff0c;在影像医学&#xff0c;光热 等都会有一定的应用。和四嗪基团进行结合&#xff0c;进行相应的荧光标记。 【英文名称】 ICG-Te…

Linux 的常用命令

前言 本篇博客给大家介绍一些常见的 Linux 命令 目录操作 pwd 查看当前工作目录 clear 清除屏幕 cd ~ 当前用户目录 cd / 根目录 cd - 上一次访问的目录 cd .. 上一级目录 其中清除屏幕的快捷键是: ctrl l ls 语法: ls 选项 目录或文件 功能: 对于目录来说…