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,并能够应用它来解决实际的大数据问题。

相关文章
|
1月前
|
存储 分布式计算 监控
Hadoop【基础知识 01+02】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
183 2
|
15天前
|
分布式计算 Java Hadoop
实现多文件合并和去重的MapReduce作业
实现多文件合并和去重的MapReduce作业
|
15天前
|
分布式计算 数据挖掘
通过mapreduce程序统计旅游订单(wordcount升级版)
通过mapreduce程序统计旅游订单(wordcount升级版)
|
1月前
|
数据采集 分布式计算 DataWorks
DataWorks产品使用合集之在DataWorks中,在MapReduce作业中指定两个表的所有分区如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
36 0
|
1月前
|
分布式计算 监控 Hadoop
Hadoop【基础知识 02】【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】Hadoop【基础知识 02】【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
173 0
|
1月前
|
分布式计算 Hadoop Java
【集群模式】执行MapReduce程序-wordcount
【集群模式】执行MapReduce程序-wordcount
|
1月前
|
分布式计算 Java Hadoop
【本地模式】第一个Mapreduce程序-wordcount
【本地模式】第一个Mapreduce程序-wordcount
|
10月前
|
分布式计算 资源调度 Hadoop
Hadoop基础学习---5、MapReduce概述和WordCount实操(本地运行和集群运行)、Hadoop序列化
Hadoop基础学习---5、MapReduce概述和WordCount实操(本地运行和集群运行)、Hadoop序列化
|
存储 分布式计算 资源调度
|
分布式计算 Java Hadoop
【本地模式】第一个Mapreduce程序-wordcount
也就是在windows环境下通过hadoop-client相关jar包进行开发的,我们只需要通过本地自己写好MapReduce程序即可在本地运行。