首页 > 其他分享 >MapReduce的词频统计应用

MapReduce的词频统计应用

时间:2024-12-22 11:29:51浏览次数:11  
标签:MapReduce hadoop 词频 org apache import 统计

MapReduce在云计算大数据中的词频统计应用


文章目录


前言

MapReduce是Google公司开源的一项重要技术,它提供了一种编程模型,用于处理和生成大数据集。MapReduce采用“分而治之”的思想,将大规模数据集的操作分发给一个主节点管理下的各个子节点共同完成,然后整合各个子节点的中间结果,得到最终的计算结果。在云计算大数据处理中,MapReduce被广泛应用于各种场景,词频统计是其中最常见的一个应用。


一、MapReduce的基本流程

MapReduce作业的执行过程分为以下几个主要步骤:

  1. 数据准备:将待处理的文本数据分成多个小块,每个小块对应一个Mapper的任务。
  2. Mapper处理:Mapper任务读取输入数据的小块,将其拆分成单词,并为每个单词生成一个键值对(key-value pair),键为单词本身,值为单词的出现次数(初值为1)。
  3. Shuffle:MapReduce框架对Mapper输出的键值对进行排序和分发,确保相同键的所有值被发送到同一个Reducer任务。
  4. Reducer处理:Reducer任务将相同键的所有值相加,得到每个单词的总出现次数。
  5. 结果输出:将Reducer的输出结果保存到文件或数据库中。

二、词频统计的具体实现

以下是一个使用MapReduce进行词频统计的详细实现步骤:

1、准备数据文件

在虚拟机或本地文件系统上创建一个文本文件。内容如下:

hello hadoop world hello hive world hello hbase world hadoop hive hbase I love hadoop and hive

将该文件上传到HDFS(Hadoop分布式文件系统)的指定目录。例如,创建/wordcount/input目录,并将文件上传到该目录:

hdfs dfs -mkdir -p /wordcount/input
hdfs dfs -put /path/to/local/words.txt /wordcount/input

2、创建MapReduce项目

使用IDEA(IntelliJ IDEA)创建一个Maven项目,选择Java作为编程语言,在xml中添加HadoopJUnit的依赖:

<dependencies>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>3.3.4</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
    </dependency>
</dependencies>

3、创建Mapper类

在项目中创建一个包(例如net.army.mr),并在该包下创建一个WordCountMapper类。
实现Mapper类的map方法,将输入的行数据拆分成单词,并输出键值对(单词,1):

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
 
public class WordCountMapper extends Mapper<LongWritable, Text, Text, LongWritable> {
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        String[] words = value.toString().split("\\s+");
        for (String word : words) {
            context.write(new Text(word), new LongWritable(1));
        }
    }
}

4、创建Reducer类

net.army.mr包下创建一个WordCountReducer类。
实现Reducer类的reduce方法,将相同键的所有值相加,得到每个单词的总出现次数:

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;
 
public class WordCountReducer extends Reducer<Text, LongWritable, Text, LongWritable> {
    @Override
    protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {
        long count = 0;
        for (LongWritable value : values) {
            count += value.get();
        }
        context.write(key, new LongWritable(count));
    }
}

5、创建Driver类

net.army.mr包下创建一个WordCountDriver类。
在该类中配置作业信息,并启动作业:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
 
public class WordCountDriver {
    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "word count");
 
        job.setJarByClass(WordCountDriver.class);
        job.setMapperClass(WordCountMapper.class);
        job.setCombinerClass(WordCountReducer.class); // 可选,用于优化性能
        job.setReducerClass(WordCountReducer.class);
 
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);
 
        FileInputFormat.addInputPath(job, new Path("/wordcount/input"));
        FileOutputFormat.setOutputPath(job, new Path("/wordcount/output"));
 
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

6、运行作业并查看结果

启动Hadoop服务:

start-all.sh

运行Driver类:

hadoop jar path/to/your/jarfile.jar net.army.mr.WordCountDriver

在HDFS的/wordcount/output目录下查看输出结果。


总结

通过以上步骤,我们使用MapReduce成功实现了一个简单的词频统计应用。在实际应用中,我们可以根据具体的需求和数据规模调整Mapper和Reducer的实现,还可以利用Combiner进行性能优化。MapReduce不仅适用于词频统计,还可以广泛应用于其他大数据处理和分析场景,是云计算大数据处理中不可或缺的重要工具。

标签:MapReduce,hadoop,词频,org,apache,import,统计
From: https://blog.csdn.net/wertuiop_/article/details/144643694

相关文章

  • AI客流量监测统计摄像机
    AI客流量监测统计摄像机是一种结合人工智能和摄像监控技术的创新产品,广泛应用于商场、车站、景区等场所,通过智能监测和统计客流量,提供决策支持和运营优化。这种摄像机利用先进的AI算法,能够准确地统计出进出人员、车辆等的数量和流向,实时监测场所的客流量情况。通过对客流数据的收......
  • 写一个方法统计给定数组中重复元素的次数
    在前端开发中,你可以使用JavaScript来编写一个方法,用于统计给定数组中重复元素的次数。以下是一个简单的示例:functioncountDuplicates(arr){//创建一个空对象,用于存储元素及其出现的次数constelementCount={};//遍历数组,统计每个元素出现的次数arr.forEach((e......
  • 2000-2023年 上市公司-企业数字化转型(报告词频、文本统计)原始数据、参考文献、代码、
    一、数据介绍数据名称:企业数字化转型-年度报告词频、文本统计数据范围:1999-2023年5630家上市公司样本数量:63051条,345个变量数据来源:上市公司年度报告数据说明:内含数字化转型314个词频、各维度水平、文本统计面板二、整理说明爬取1999-2023年上市公司年报将原始报告文本......
  • Linux 环境 c++ 实现单词数量统计
    g++的使用g++的安装升级#安装gccsudoapt-getinstallgcc#安装g++sudoapt-getinstallg++c++编译g++-o【生成目标文件名】【c++代码源文件】命令行传参使用命令行传参时使用此main函数argc表示传入参数个数argv用来访问参数,0为程序的名称,1到argc-1......
  • Hexo Next主题集成百度统计
    个人博客地址:HexoNext主题集成百度统计|一张假钞的真实世界。首先,需要在百度统计控制台新增自己的站点。点击“新增网站”按钮:按照要求输入相关信息并保存,页面跳转至代码获取页面。从代码页面中拷贝网站的ID:......
  • 【硬件测试】基于FPGA的2FSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模
    1.算法仿真效果本文是之前写的文章 基于FPGA的2FSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR_fpga2fsk-CSDN博客 的硬件测试版本。 在系统在仿真版本基础上增加了ila在线数据采集模块,vio在线SNR设置模块,数据源模块。 硬件ila测试结......
  • 【位运算】统计二进制中1的个数
    方法一:利用按位与运算(&)结合移位操作来逐位判断二进制数中的每一位是否为1。#include<iostream>usingnamespacestd;intn,ans;intmain(){cin>>n;while(n){if(n&1){ans++;}n>>=1;}cout<<ans<<endl......
  • Java如何用HaspMap统计次数并排序详解
    java统计单词频率继上一讲Java用PDFTextStripper来解析pdf文件提取文字-ivanlee717-博客园讲了如何接收和解析pdf之后,我们把pdf文件全部转为了String类型的字符串,那么这一讲聊聊怎么去统计每个词出现的频率。正则过滤首先我们需要把单词弄出来,把其他的文字过滤掉。Pattern......
  • 明察秋毫--用ss工具统计网络栈内存使用
    前言本文介绍了用ss工具来统计一下当前网络栈的内存使用情况环境准备组件版本操作系统Ubuntu22.04.4LTS查看socket内存相关参数,-m参数▶ss-tmStateRecv-QSend-QLocalAddres......
  • 【数理统计】参数估计
    目录点估计矩估计法最大似然估计法区间估计单个正态总体参数的区间估计均值\(\mu\)的区间估计方差\(\sigma^2\)的区间估计两个正态总体参数的区间估计(略)补充:单侧置信区间点估计矩估计法【定义】设\(X\)是随机变量,若\(E(X^k)(k=1,2,...)\)存在,则称其为\(X\)的\(k\)......