读书笔记--MapReduce词频统计

大数据技术——MapReduce词频统计 注:参考林子雨老师教程,具体请见 MapReduce编程实践(Hadoop3.1.3)_厦大数据库实验室博客 一.实验目的 1.理解Hadoop中MapReduce模块的处理逻辑。 2.熟悉MapReduce编程。 二.实验内容 1.新建文件夹input,并在其中创建三个指定文件名的文本文件,并将特定内容存入三个文本。 2.启动Hadoop伪分布/全分布模式式,将input文件夹上传到HDFS上。 3.编写MapReduce程序,实现单词出现次数统计。统计结果保存到hdfs的output文件 阅读详情

       词频统计作为MapReduce入门的一个基础算法,相当与各种语言的“Hello World”程序。下面简单说一下MapReduce的算法实现。

       Mapper代码:

public class WordMapper extends Mapper<Object,Text,Text,IntWritable>{
    private IntWritable one = new IntWritable(1);
    private Text word = new Text();

    private String patter = "[^a-zA-Z0-9]";

    @Override
    protected void map(Object key, Text value, Context context) throws IOException, InterruptedException {
        //将非数字、英文的字符转换为空格
        StringTokenizer str = new StringTokenizer(value.toString().replaceAll(patter," ").toLowerCase());
        while(str.hasMoreTokens()){
            word.set(str.nextToken());
            context.write(word,one);
        }
    }
}

       一个文本文件被程序读取时,Mapper默认的LineRecordReader得到的value值是文本文件的一行,key值为初始偏移量。假如一个文本内容为:

       Hello World! Line one.

       Hello World! Line two.

       则第一次map获取到的value为:

       Hello World! Line one.

       Key为0。之后在map中通过循环,将单词一个个提取出来,通过context.write()方法输出为如<word,1>的键值对输出。此时输出的结果为:

       <hello,1>,<world,1>,<line,1>,<one,1>

       在节点的mapper处理完毕后,处理结果由Reducer处理(中间可以添加combiner、排序等此处暂时省略)。

       Reducer代码:

public class WordReducer extends Reducer<Text,IntWritable,Text,IntWritable>{

    private IntWritable result = new IntWritable();

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int sum = 0;
        for(IntWritable val:values){
            sum += val.get();
        }
        result.set(sum);
        context.write(key,result);
    }
}

       Reducer将相同的key(并非一定相同,可以通过制定不同的算法使不同的值)分配到同一个reducer上。此时可以通过取出value的值进行相加,获得该单词的频率。最后通过context.write函数将结果输出为文本。

       Main方法:

public class WordCountTest {
    public static void main(String[] args) throws IOException {
        Configuration conf=new Configuration();
        conf.set("fs.defaultFS", "hdfs://localhost:9000");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        Job job=null;
        try{
            job=Job.getInstance(conf,"WordCount");
            job.setJarByClass(WordCountTest.class);
            job.setOutputKeyClass(Text.class);
            job.setOutputValueClass(IntWritable.class);
            job.setMapperClass(WordMapper.class);
            job.setReducerClass(WordReducer.class);
            FileInputFormat.addInputPath(job,new Path(args[0]));
            FileOutputFormat.setOutputPath(job,new Path(args[1]));
            //job.setOutputFormatClass(SequenceFileOutputFormat.class);
            job.waitForCompletion(true);
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }
}

       注:Mapper和Reducer泛型声明的几个类型分别为:输入key类型、输入vlaue类型、输出key类型、输出value类型。

大数据批处理入门:从零开始掌握Hadoop核心技术 在互联网时代,企业每天产生的用户行为日志、交易记录、传感器数据等可能达到TB甚至PB级别。传统单机数据库或计算工具(如Excel、MySQL)无法高效处理这类“海量、低速、非实时”的数据,大数据批处理技术应运而生。本文聚焦Hadoop这一经典批处理框架,覆盖其核心组件(HDFS、MapReduce、YARN)的原理、协作方式及实战操作,帮助读者掌握“用Hadoop处理10GB以上数据”的基础能力。 阅读详情

相关推荐

单词词频统计程序(map set 应用)

题目: 输入大量单词,每词一行,不超过20字符,没有空格。按出现次数从多到少输出这些单词及其出现次数。出现次数相同的,按字典序输出。 实现: #include #include #include #include using namespace std; struct Word{ int times; string wd; }; struct Rule{//自定义的比较 bo

Unyielding will 938

MapReduce实现词频统计

1.词频统计任务要求 准备两个txt文件分别为wordfile1.txt和wordfile2.txt,内容如下: 2.在Eclipse中创建项目 我的eclipse在usr/local/eclipse目录下,使用如下命令启动 cd /usr/local/eclipse ./eclipse

weixin_54554221的博客 1万+

《数学之美》第三版的读书笔记一、主要是马尔可夫假设、隐马尔可夫模型、图论深度/广度、PageRank相关算法、TF-IDF词频算法

从19世纪到20世纪初,俄国有个数学家叫马尔可夫他提出了一种方法,假设任意一个词出现的概率只同它前面的词有关。这种假设在数学上称为马尔可夫假设。

学以致用 知行合一 408

基于MapReduce的词频统计过程分析

问题提出: 假设HDFS中/user/hadoop/input文件夹下有文件wordfile1.txt和wordfile2.txt。现在需要设计一个词频统计程序,统计input文件夹下所有文件中每个单词的出现次数。 运行过程: 1.Map输入<key,value>形式,即 map第一个任务: <1,I love spark> <1,I love hadoop> map第二个任务: <1,hadoop is good> <2,spark is fas

weixin_46529416的博客 3662

xilinx vivado 设置多核多线程加快综合、布局布线、仿真速度的方法

加快vivado布局布线速度的多核编译方法 在tcl中执行下面的语句 set param general.maxThreads n来设置,n是你的CPU线程数。 在设置之后你可以通过get_param general.maxThreads 指令来确认是否成功设置, 加快vivado综合速度的多核编译方法 操作方法与上面加快布局布线的方法一样。 实际发现效果并不是很明显,官方论坛中提到只有在LINUX上才能发挥8核以上的效能,而且8核以上的效能提升并不明显。 加快vivado仿真.

shawn的FPGA圈 2万+

ANSYS 2026 R1 Windows系统安装避坑指南:环境配置、模块部署与许可证实战

ANSYS作为主流CAE仿真平台,其安装部署已远超传统软件范畴,演变为涉及操作系统底层、GPU驱动兼容性、许可证微服务架构和统一缓存机制的系统工程。理解ANSYS安装原理,需从Windows 11 UEFI安全启动要求、DirectX 12 Ultimate图形栈依赖、gRPC架构的License Manager端口动态分配等核心机制切入;技术价值在于保障HFSS GPU加速、Fluent MPI并行稳定性及Workbench多模块协同可靠性;典型应用场景涵盖高校仿真实验室升级、工业设计院所平台重建及高性能

weixin_29251337的博客 1433

在Hadoop中进行简单的词频统计

在Hadoop中进行简单的词频统计 1.建立WCMapper 代码如下: import java.io.IOException; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class W...

m0_46802377的博客 2793

NVIDIA Tao Toolkit环境配置踩坑

请搭配食用该文章为 Tao 安装中可能出现的问题进行解答,如果存在本文章中没出现的问题,欢迎提问,由我复现后更新文章。由于大部分云服务器厂商不能支持 docker,因此我使用的环境为2023年5月27日在平台租的 3080 旧版环境进行实验。

qq_36630208的博客 772

MapReduce初见:词频统计

二、环境介绍 在 VMware Workstation Pro虚拟机环境中安装 Ubuntu系统,并在 Ubuntu 中安装 Hadoop,Eclipse,以及二者所需 Java运行环境(jdk1.8),配置并运行 Hadoop 伪分布式。在Eclipse官网下载压缩版 Eclipse 2021-09进行安装,并使用eclipse-hadoop-plugin插件辅助开发。将待分析的文件上传至 HDFS, 三、数据来源及数据上传 准备一个英文文本,这里使用MySQL官网文档部分截取(来源:https://de

FigBB的博客 2750

大数据架构中的数据血缘追踪技术解析

数据血缘(Data Lineage)是指数据从源头到目标的完整流转路径,它记录了数据在整个生命周期中的变化过程。在大数据架构中,数据血缘追踪技术已经成为数据治理的核心组成部分。本文旨在全面解析数据血缘追踪的技术原理、实现方法和应用实践,帮助读者深入理解这一关键技术。本文将从基础概念入手,逐步深入到技术实现细节,最后探讨实际应用和未来趋势。数据血缘的核心概念和技术原理数据血缘的数学模型和算法实现实际项目案例和代码解析主流工具和解决方案比较未来发展方向和技术挑战。

架构师的AI之路,分享AI应用开发架构的学习与实践。 690

解决倍福ADS通信错误1861和6:一次完整的TwinCAT3路由配置与故障排查实录

本文详细解析了在Linux系统上解决倍福ADS通信错误1861和6的完整流程,包括TwinCAT3路由配置与故障排查。通过实例演示了如何正确配置AMS NetID、使用adstool工具添加静态路由,以及高级网络抓包分析技巧,帮助工程师快速定位和解决通信问题。

weixin_30875157的博客 522

读书笔记--MapReduce 适用场景 及 常见应用

1、MR解决的问题的特点 MR是应大数据的背景产生,其解决的问题的共性为:大问题可以被分解为许多子问题,且这些子问题相对独立,将这些子问题并行处理完后,大问题也就被解决。是用来分治、分解的思想。 2、Google论文中提及的典型应用: URL访问率统计,分布式grep,分布式排序,倒序索引构建,Web连接图反转等。 3、从书中看到的几个比较复杂的应用: (1)、TopK问题 问题:在搜

架构师思考实践 9293

Android 10.0 SystemUI下拉状态栏点击设置跳转设置时白屏修改

在10.0的系统rom定制化开发中,在SystemUI下拉状态栏下方点击设置图标跳转设置的过程中,发现 有白屏显示挡住设置界面,显示白屏,接下来分析下相关原因来解决这个问题

安卓兼职framework和app工程师的博客 81

Google MapReduce有啥巧妙优化?

搞架构的人,Google的架构论文是必看的,但好像大家都不愿意去啃英文论文。故把自己的读书笔记,加入自己的思考,分享给大家。 《MapReduce到底解决什么问题?》做了简介,这是第二篇,Google MapReduce优化启示(中)。   什么是MapReduce? MapReduce这个编程模型解决什么问题? Google MapReduce是Google产出的一个编程模型,同时...

勇往直前的专栏 332

Deep SHAP 深度学习模型的可解释性分析

Deep SHAP 算法是一种用于解释深度学习模型的技术, 该算法通过将每个特征的重要性与输出值相关联来进行解释。本博客对深度学习的模型可解释性进行了分析。

cnjs1994的博客 5121

2026年职业院校技能大赛中职移动应用与开发—数字生活APP原型设计参考答案(含素材)

本模块以产品原型为目标,考查参赛选手熟练收集、分析和归纳客户需求,清晰梳理业务流程,熟练使用UI设计软件进行产品UI/UE设计,掌握正确的UI配色方案,设计出符合业务逻辑的人体工学移动App 原型优秀作品。

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 570

文本上的算法读书笔记四--分布式系统

第三篇 应用篇 如何计算的更快 随着数据量的爆炸式增长,如何存储和计算海量数据就成了一个问题。解决的方法之一是使用分布式系统,可以更快更好的完成用户的请求。 程序优化 程序执行时,经过将目标文件中的代码和数据从磁盘拷贝到主存,从存储器拷贝到寄存器堆,再从寄存器中拷贝到显示器上。 花费大量的时间把信息从一个地方拷贝到另一个地方。需要系统设计者考虑怎么设计存储器使拷贝操作尽可能快。 存储器...

qq_24495287的博客 162

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

《Programming Hive》读书笔记(一)Hadoop和hive环境搭建

《Programming Hive》读书笔记(一)Hadoop和Hive环境搭建 先把主要的技术和工具学好,才干更高效地思考和工作。 Chapter 1.Introduction 简单介绍 Chapter 2.Getting Started 环境配置 Hadoop版本号会更新,以官方安装教程为准 http://hadoop....

weixin_30846599的博客 69

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

《Hive编程指南》第一章

第一章 基础知识 数据是了解用户、提高业务在市场上表现、提高基础架构效率的资源。 Hadoop生态系统是为大数据集产生的解决方案,实现了一个计算模型MapReduce,它可以将计算任务分割成多个处理单元,分散到一群家用或服务器级别的硬件机器上。 Hive的存在意义 用户从现有的基于传统关系的数据架构转移到Hadoop上时,Hive提供给sql用户利用HQL查询存储在Hadoop集群中的数据。 Hive将大多数查询转换为MapReduce任务(job),使用户不需要接触到底层的API。 说人话:使用Ha

废料生产地 534

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

MapReduce - 词频统计

统计一个文本的词频 package Test01; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import or...

BlessingXRY的博客 1079

MapReduce词频统计

import java.io.IOException; import java.util.Iterator; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.ap

m0_46671240的博客 390
上一篇: DataTablesUtil服务器端分页查询
下一篇: MyBatis-Plus分页控件使用及使用过程发现的一个坑
ZGUIZ
博客等级 码龄10年 106粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值