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

这篇具有很好参考价值的文章主要介绍了【云计算与大数据计算】Hadoop MapReduce实战之统计每个单词出现次数、单词平均长度、Grep(附源码 )。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

一、WordCount

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

运行示意图如下

hadoop统计单词出现次数,云计算与大数据技术,hadoop,mapreduce,大数据,云计算,分布式

运行结果如下 

hadoop统计单词出现次数,云计算与大数据技术,hadoop,mapreduce,大数据,云计算,分布式

 二、WordMean

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

三、Grep

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

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

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

运行效果如下

hadoop统计单词出现次数,云计算与大数据技术,hadoop,mapreduce,大数据,云计算,分布式

 四、代码

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

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>

创作不易 觉得有帮助请点赞关注收藏~~~文章来源地址https://www.toymoban.com/news/detail-562576.html

到了这里,关于【云计算与大数据计算】Hadoop MapReduce实战之统计每个单词出现次数、单词平均长度、Grep(附源码 )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python统计每个单词出现的次数

    编程要求 请按照函数的注释,补充程序中缺失部分语句,按要求实现如下程序功能:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬ word_frequency() 函数统计并以字典类型返回每个

    2024年02月11日
    浏览(44)
  • 云计算与大数据入门实验四 —— MapReduce 初级编程实践

    通过实验掌握基本的 MapReduce 编程方法 掌握用 MapReduce 解决一些常见的数据处理问题,包括数据去重、数据排序和数据挖掘等 (一)编程实现文件合并和去重操作 对于两个输入文件,即文件A和文件B,请编写MapReduce程序,对两个文件进行合并,并剔除其中重复的内容,得到一个

    2024年02月05日
    浏览(43)
  • 基于Hadoop的云计算与大数据处理技术

    一、实验目的 1.了解Scala语言的基本语法 2.了解Spark Scala开发的原理 3.了解Spark Java API的使用 4.了解Spark的Scala API及Java API对数据处理的不同点 二、实验内容  某电商网站记录了大量用户对商品的收藏数据,并将数据存储在名为buyer_favorite1的文件中,数据格式以及数据内容如下

    2024年02月04日
    浏览(38)
  • Hadoop MapReduce 统计汽车销售信息

    本文将讨论如何使用Hadoop MapReduce来统计汽车销售信息。 汽车销售的记录文件名叫Cars.csv,里面记录了汽车的销售信息,数据内容如下: 格式为: 第1列:销售的省份 第3列:销售的城市 第7列:汽车生产商 第8列:汽车品牌名 第12列:汽车销售数量 已经将Cars.csv上传到HDFS文件

    2024年02月03日
    浏览(52)
  • hadoop学习:mapreduce入门案例二:统计学生成绩

    这里相较于 wordcount,新的知识点在于学生实体类的编写以及使用 数据信息: 1. Student 实体类 2.  mapper 阶段,StudentMapper 类 3. reduce 阶段,StudentReduce 类 4. 驱动类,studentDriver 类

    2024年02月11日
    浏览(42)
  • 云计算与大数据第15章 分布式大数据处理平台Hadoop习题带答案

    1、分布式系统的特点不包括以下的(  D  )。 A. 分布性     B. 高可用性        C. 可扩展性     D.串行性 2、Hadoop平台中的(  B  )负责数据的存储。 A. Namenode   B. Datanode         C. JobTracker D. SecondaryNamenode 3、HDFS中block的默认副本数量是(  A  )。 A.3     

    2024年02月06日
    浏览(49)
  • 大数据与云计算——部署Hadoop集群并运行MapReduce集群案例(超级详细!)

    Linux搭建Hadoop集群(CentOS7+hadoop3.2.0+JDK1.8+Mapreduce完全分布式集群) 本文所用到的版本号: CentOS7 Hadoop3.2.0 JDK1.8 基本概念及重要性 很多小伙伴部署集群用hadoop用mapreduce,却不知道到底部署了什么,有什么用。在部署集群之前先给大家讲一下Hadoop和MapReduce的基本概念,以及它们在大

    2024年02月04日
    浏览(45)
  • python输入一段英文,计算每个单词或数字出现的次数,并以字典方式输出。

    输入一段英文,计算每个单词或数字出现的次数。(这次有标点,但并没有加以区分,而是单独计数) 思路: 输入的字符串中会有多个重复的字符串,想要计数可以使用count函数。 这个题目更适合使用字典来解决,毕竟字典里的key不会重复,如果输入的内容重复了,就直接

    2023年04月16日
    浏览(36)
  • 【智能大数据分析】实验1 MapReduce实验:单词计数

    在我之前的一篇博客中:云计算中的大数据处理:尝试HDFS和MapReduce的应用有过类似的操作,具体不会的可以去这篇博客中看看。 基于MapReduce思想,编写WordCount程序。 1.理解MapReduce编程思想; 2.会编写MapReduce版本WordCount; 3.会执行该程序; 4.自行分析执行过程。 MapReduce是一种

    2024年02月07日
    浏览(38)
  • 大数据实战——基于Hadoop的Mapreduce编程实践案例的设计与实现

    图1:MaxCompute MapReduce各个阶段思路设计 设计思路分析分为六个模块:input输入数据、splitting拆分、Mapping映射、Shuffing派发、Reducing缩减、Final result输出。 输入数据:直接读入文本不进行分片,数据项本身作为单个Map Worker的输入。 Map阶段:Map处理输入,每获取一个数字,将数

    2024年02月05日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包