Hadoop入门(二十三)Mapreduce的求数量最大程序

一、简介

在文件中统计出现最多个数的单词,将其输出到hdfs文件上。

 

二、例子

(1)实例描述
给出三个文件,每个文件中都若干个单词以空白符分隔,需要统计出现最多的单词                                            

样例输入:                                            
1)file1:  

MapReduce is simple

2)file2:  

MapReduce is powerful is simple 

3)file3:  

Hello MapReduce bye MapReduce

期望输出:

MapReduce      4

(2)问题分析
实现"统计出现最多个数的单词"只要关注的信息为:单词、词频。

 

(3)实现步骤

1)Map过程 

首先使用默认的TextInputFormat类对输入文件进行处理,得到文本中每行的偏移量及其内容。显然,Map过程首先必须分析输入的<key,value>对,得到倒排索引中需要的三个信息:单词、词频

2)Combine过程 
    经过map方法处理后,Combine过程将key值相同的value值累加,得到一个单词在文档在文档中的词频,输出作为Reduce过程的输入。

3)Reduce过程 
经过上述两个过程后,Reduce过程只需将相同key值的value值累加,保留最大词频的单词输出。

 

(4)代码实现

package com.mk.mapreduce;import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.FileSplit;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;
import java.net.URI;
import java.util.*;public class MaxWord {public static class MaxWordMapper extends Mapper<LongWritable, Text, Text, IntWritable> {private final Text newKey = new Text();private final IntWritable newValue = new IntWritable(1);@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {if (StringUtils.isBlank(value.toString())) {System.out.println("空白行");return;}StringTokenizer tokenizer = new StringTokenizer(value.toString());while (tokenizer.hasMoreTokens()) {String word = tokenizer.nextToken();newKey.set(word);context.write(newKey, newValue);}}}public static class MaxWordCombiner extends Reducer<Text, IntWritable, Text, IntWritable> {private final IntWritable newValue = new IntWritable();@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int count = 0;for (IntWritable v : values) {count += v.get();}newValue.set(count);context.write(key, newValue);}}public static class MaxWordReducer extends Reducer<Text, IntWritable, Text, IntWritable> {private String word = null;private int count = 0;@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int c = 0;for (IntWritable v : values) {c += v.get();}if (word == null || count < c) {word = key.toString();count = c;}}@Overrideprotected void cleanup(Context context) throws IOException, InterruptedException {if (word != null) {context.write(new Text(word), new IntWritable(count));}}}public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {String uri = "hdfs://192.168.150.128:9000";String input = "/maxWord/input";String output = "/maxWord/output";Configuration conf = new Configuration();if (System.getProperty("os.name").toLowerCase().contains("win"))conf.set("mapreduce.app-submission.cross-platform", "true");FileSystem fileSystem = FileSystem.get(URI.create(uri), conf);Path path = new Path(output);fileSystem.delete(path, true);Job job = new Job(conf, "MaxWord");job.setJar("./out/artifacts/hadoop_test_jar/hadoop-test.jar");job.setJarByClass(MaxWord.class);job.setMapperClass(MaxWordMapper.class);job.setCombinerClass(MaxWordCombiner.class);job.setReducerClass(MaxWordReducer.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(IntWritable.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);FileInputFormat.addInputPaths(job, uri + input);FileOutputFormat.setOutputPath(job, new Path(uri + output));boolean ret = job.waitForCompletion(true);System.out.println(job.getJobName() + "-----" + ret);}
}

 

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

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

相关文章

解决微服务在docker上部署后无法连接数据库的问题

在利用docker部署完应用程序后&#xff0c;就接着考虑如何将程序连接到数据库。 但是过程中发现一些问题&#xff1a; 本地程序在打包后连接的是本地的数据库&#xff0c;在服务器上部署之后必须提供相同的环境才能部署成功。 这里博主用的是宝塔安装的mysql&#xff0c;并尝…

P3365,jzoj3894-改造二叉树【LIS,BST】

正题 题目大意 一棵二叉树&#xff0c;有点权。求修改最少的点使得这是一个BSTBSTBST。 解题思路 二叉查找树满足点权的中序单调递增。 所以跑一遍中序遍历&#xff0c;就变为了求修改多少遍使一个序列单调递增。 求最长上升就好了。可是要求修改的是整数&#xff0c;所以需…

我心中的ASP.NET Core 新核心对象WebHost(一)

以本系列文章向Fish 前辈的那篇我心中的ASP.NET 核心对象致敬。&#xff08;虽然不知道前辈现在在干什么&#xff09;。一晃就6年过去了&#xff0c;那首 郝云 的《回到那一天》怎么唱来着&#xff1f; 时光一晃&#xff0c;你就三十了。 而我们都变成了老了的程序员 ASP.NET …

Hadoop入门(二十四)Mapreduce的求TopK程序

一、简介 求TopK是算法中最常使用到的&#xff0c;现在使用Mapreduce在海量数据中统计数据的求TopK。 二、例子 &#xff08;1&#xff09;实例描述 给出三个文件&#xff0c;每个文件中都存储了若干个数值&#xff0c;求所有数值中的求Top 5。 样例输入&#xff1a; …

DML、DDl、DQL实战

表的创建与删除 create table 学生成绩( id int primary key, name char(10) not null, sex char(10) not null, 物理 int not null, 语文 int not null, 英语 int not null, 数学 int )DEFAULT CHARSETutf8mb4; drop table 学生成绩; DML 数据操纵语言DML主要有三种形式&a…

Scaffolding Template on Asp.Net Core Razor Page

Scaffolding Template Intro 我们知道在Asp.Net MVC中&#xff0c;如果你使用的EF的DBContext的话&#xff0c;你可以在vs中通过右键解决方案-添加控制器-添加包含视图的控制器&#xff0c;然后vs会根据你选择的Model自动生成相应的CURD的控制器和View&#xff0c;非常便利&…

jzoj3895-数字对【RMQ,GCD,二分答案,单调队列】

正题 题目大意 一个序列aaa 对于[L..R][L..R][L..R]若ak∈[L..R]∣ai∈[L..R]a_k \in [L..R]|a_i\in[L..R]ak​∈[L..R]∣ai​∈[L..R]则这个一个特殊区间。 求最长特殊区间。 解题思路 先RMQRMQRMQ求区间GCDGCDGCD&#xff0c;然后二分答案。 之后aka_kak​肯定是这个区间最…

Hadoop生态hive(一)介绍

一、Hive是什么 起源自facebook由Jeff Hammerbacher领导的团队&#xff0c;构建在Hadoop上的数据仓库框架。设计目的是让SQL技能良好&#xff0c;但Java技能较弱的分析师可以查询海量数据。2008年facebook把hive项目贡献给Apache。 由facebook开源&#xff0c;最初用于解决海量…

jzoj3896-战争游戏【tarjan,割点,点双联通分量】

正题 题目大意 求每个点是多少个点对之间路径的必经点。 解题思路 首先若一个点是在点不是割点&#xff0c;那么答案就是n−1n-1n−1&#xff0c;因为这个点不是除了它自己以为任何点对的必经点。 之后我们记录每个可以割掉的联通分量的大小。对于一个割点&#xff0c;是两种…

使用混合云的SQL Server

近期发布的Microsoft SQL Server 2017&#xff0c;表明Microsoft公司正寻求不断降低其所交付的工具对平台的绑定。在SQL Server 2017中&#xff0c;这一趋势可以从“混合云”&#xff08;Hybrid Cloud&#xff09;术语和多平台本质这两个方面得以证实。下面让我们分别一窥这两个…

Hadoop生态hive(二)安装

一、安装模式 内嵌模式&#xff1a;元数据保持在内嵌的Derby模式&#xff0c;只允许一个会话连接 本地独立模式&#xff1a;在本地安装Mysql&#xff0c;把元数据放到Mysql内 远程模式&#xff1a;元数据放置在远程的Mysql数据库 官方文档&#xff1a; https://cwiki.apac…

.NET Core多平台项目模板eShopOnContainers编译手记

之前写了一个功能性的文件上传asp.net core的小程序&#xff0c;加上点七七八八的东西&#xff0c;勉强能够应付了&#xff0c;打算学习一下微软的官方.NET CORE微服务示例https://github.com/dotnet-architecture/eShopOnContainers。这个例子很全面地展现了微服务、docker以及…

欢乐纪中某B组赛【2019.1.25】

前言 还算OKOKOK 成绩 RankRankRank是有算别人的 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC4442017myself2017myself2017myself1801801801001001008080800005552017zyc2017zyc2017zyc1601601606060601001001000001111112017hzb2017hzb2017hzb14014014060606080…

如何改变Idea的背景

进入Idea 按下ctrlshifta 点击set background 选择自己准备好的图片地址&#xff0c;就可以更改背景了 更改后效果 关于接口的插件 GsonFormat插件 安装还是和别的插件一样&#xff0c;在plugin里搜索GsonFormat&#xff0c;下载并重启 然后在model里的类 按下alts 出现 将…

jzoj1252,P5194-天平【dfs,set】

正题 题目大意 nnn个砝码&#xff0c;选择若干个要求重量不超过ccc的情况下最重。 解题思路 拆成两部分来dfsdfsdfs&#xff0c;第一部分将答案加入setsetset。 第二部分对于每个答案在setsetset中查询。 时间复杂度O(2n2logn)O(2^{\frac{n}{2}}\ log\ n)O(22n​ log n) cod…

包依赖

thymeleaf <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>

TFS在项目中Devops落地进程(上)

作为一名开发,经过近2年折腾,基于TFS的Devops主线工程大体落地完毕。 在此大体回忆下中间的各种历程。 开始之前简单说下什么是TFS(Team Foundation Server)。 TFS是微软推出的一款ALM&#xff08;Application Lifecycle Management)管理工具。 透过TFS你将能获取到从代码版本管…

Hadoop生态hive(三)Hive QL介绍

一、表 创建表 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name CREATE TABLE 创建一个指定名字的表。Hive 创建内部表时&#xff0c;会将数据移动到数据仓库指向的路径&#xff1b; EXTERNAL 关键字可以让用户创建一个外部表&#xff0c;在建表的同时指定一个指向实…

抖音上非常火的旋转图快速部署

本教程不需要你有服务器&#xff01; 本教程不需要你有服务器&#xff01; 本教程不需要你有服务器&#xff01; 点击我看旋转图 总共两步 1、注册一个码云账号 2、新建一个仓库&#xff0c;上传文件即可 1、注册账号的话&#xff0c;直接浏览器搜索码云&#xff0c;手机号…

hive命令出现问题Failed with exception Java.io.IOException:java.lang.IllegalArgumentException: java.NET.URI

转载自 hive命令出现问题Failed with exception Java.io.IOException:java.lang.IllegalArgumentException: java.NET.URI 一&#xff0c;问题描述&#xff1a;    登录到hive数据仓库后&#xff0c;输入一些命令&#xff0c;例如&#xff08;show databases &#xff0c…