mapreduce 实现带有ex前缀的词频统计wordcount 大作业

简介: mapreduce 实现带有ex前缀的词频统计wordcount 大作业

介绍:

我们将介绍如何使用MapReduce来实现带有一点变化的词频统计,特别是我们将关注以“ex”前缀开头的单词。通过结合代码和解释,让我们一起深入探讨“ExWordCount2”的奥秘。

输入为6篇英文短篇小说,图片如下:

代码解析:

首先,让我们看一下Mapper的实现。在 TokenizerMapper 类中,我们的mapper将输入文本拆分为单词,并且仅保留以“ex”开头的单词。同时,我们对这些单词进行了标准化处理,确保它们不受非字母数字字符的干扰。然后,我们将这些单词作为键值对发射出去,其中键是单词本身,值为1,表示单词出现了一次。

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

    public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
        String[] words = value.toString().split("\\s+");
        for (String w : words) {
            w = w.toLowerCase().replaceAll("[^a-zA-Z0-9]", ""); // Remove non-alphanumeric characters
            if (w.startsWith("ex")) {
                word.set(w);
                context.write(word, one);
            }
        }
    }
}

接下来是Reducer的实现。在 IntSumReducer 类中,我们对来自Mapper的输出进行汇总,将相同键的值相加以计算出现次数的总和。最终,我们将每个以“ex”前缀开头的单词及其出现次数作为输出。

public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
    private IntWritable result = new IntWritable();

    public 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);
    }
}

组合器的应用:

为了提高效率,我们引入了一个组合器。组合器在Mapper的输出进行本地聚合,以减少数据传输和处理负担。在我们的例子中,IntSumReducer 类同时作为组合器,执行局部合并操作,将相同单词的计数相加。

执行过程:

在 main 方法中,我们初始化了MapReduce作业,并设置了必要的配置,如输入和输出路径,以及Mapper和Reducer类。然后,我们启动了作业,并观察Mapper、组合器和Reducer阶段的执行情况。

public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
    Job job = Job.getInstance(conf, "ExWordCount2");
    job.setJarByClass(ExWordCount2.class);
    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(IntSumReducer.class); // Combiner to perform local aggregation
    job.setReducerClass(IntSumReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    FileInputFormat.addInputPaths(job, "data");
    FileOutputFormat.setOutputPath(job, new Path("ExWordCount2"));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
}


结论:

通过本博客文章,我们不仅学习了如何实现带有变化的词频统计,还深入了解了MapReduce的工作原理。我们了解了Mapper如何将输入数据转换为键值对,Reducer如何对这些键值对进行汇总,以及组合器如何在整个过程中提高性能。通过结合代码和解释,我们希望读者能够更好地理解

MapReduce,并能够应用它来解决实际的大数据问题。

相关文章
|
2月前
|
分布式计算 资源调度 Hadoop
Hadoop-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容
Hadoop-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容
100 3
|
2月前
|
分布式计算 资源调度 Hadoop
Hadoop-05-Hadoop集群 集群WordCount 超详细 真正的分布式计算 上传HDFS MapReduce计算 YRAN查看任务 上传计算下载查看
Hadoop-05-Hadoop集群 集群WordCount 超详细 真正的分布式计算 上传HDFS MapReduce计算 YRAN查看任务 上传计算下载查看
52 1
|
7月前
|
存储 分布式计算 监控
Hadoop【基础知识 01+02】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
322 2
|
4月前
|
分布式计算 Hadoop Java
Hadoop_MapReduce中的WordCount运行详解
MapReduce的WordCount程序在分布式系统中计算大数据集中单词出现的频率时,提供了一个可以复用和可伸缩的解决方案。它体现了MapReduce编程模型的强大之处:简单、可靠且将任务自动分布到一个集群中去执行。它首先运行一系列的Map任务来处理原始数据,然后通过Shuffle和Sort机制来组织结果,最后通过运行Reduce任务来完成最终计算。因此,即便数据量非常大,通过该模型也可以高效地进行处理。
108 1
|
6月前
|
分布式计算 Java Hadoop
实现多文件合并和去重的MapReduce作业
实现多文件合并和去重的MapReduce作业
170 0
|
6月前
|
分布式计算 数据挖掘
通过mapreduce程序统计旅游订单(wordcount升级版)
通过mapreduce程序统计旅游订单(wordcount升级版)
|
7月前
|
数据采集 分布式计算 DataWorks
DataWorks产品使用合集之在DataWorks中,在MapReduce作业中指定两个表的所有分区如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
87 0
|
7月前
|
分布式计算 监控 Hadoop
Hadoop【基础知识 02】【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】Hadoop【基础知识 02】【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
305 0
|
7月前
|
分布式计算 Hadoop Java
【集群模式】执行MapReduce程序-wordcount
【集群模式】执行MapReduce程序-wordcount
|
7月前
|
分布式计算 Java Hadoop
【本地模式】第一个Mapreduce程序-wordcount
【本地模式】第一个Mapreduce程序-wordcount