`

(四)利用Hadoop MapReduce 实现文本单词频率统计

 
阅读更多

1.Map开发。

package com.aa.mapreduce;

import java.io.IOException;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class WordMapper extends Mapper<LongWritable, Text, Text, LongWritable> {
 private LongWritable outValue=new LongWritable(1L);
 public void map(LongWritable key,Text value,Context context)throws IOException,InterruptedException{
  String[] lst=value.toString().split(" ");
  for(String item:lst){
   context.write(new Text(item),outValue);
  }
 }
}

 

2.Reduce开发。

package com.aa.mapreduce;

import java.io.IOException;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class WordReducer extends Reducer<Text, LongWritable, Text, LongWritable> {
 public void reduce(Text key,Iterable<LongWritable> values,Context context)throws IOException,InterruptedException{
  long total=0;
  for(LongWritable item:values){
   total+=item.get();
  }
  context.write(key,new LongWritable(total));
 }
}

3.调度程序开发.

package com.aa.mapreduce;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
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.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

public class WordMain {
 public static void main(String[] args) throws Exception{
  String input_dir="tmp/word/a.txt";
  String outputDir="tmp/output";
  Configuration conf=new Configuration();
  FileSystem fs=FileSystem.get(conf);
  fs.deleteOnExit(new Path(outputDir));
  fs.close();
  Job job=new Job(conf,"WordMain");
  job.setMapperClass(WordMapper.class);
  job.setReducerClass(WordReducer.class);
  ///job.setNumReduceTasks(tasks)
  job.setMapOutputKeyClass(Text.class);
  job.setMapOutputValueClass(LongWritable.class);
  
  job.setOutputKeyClass(Text.class);
  job.setOutputValueClass(LongWritable.class);
  
  job.setInputFormatClass(TextInputFormat.class);
  TextInputFormat.setInputPaths(job, new Path(input_dir));
  
  job.setOutputFormatClass(TextOutputFormat.class);
  TextOutputFormat.setOutputPath(job, new Path(outputDir));
  
  job.waitForCompletion(true);
  
 }

}
4.执行日志。

12/04/26 09:55:57 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
12/04/26 09:55:57 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
12/04/26 09:55:59 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
12/04/26 09:56:00 WARN mapred.JobClient: No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String).
12/04/26 09:56:00 INFO input.FileInputFormat: Total input paths to process : 1
12/04/26 09:56:00 WARN snappy.LoadSnappy: Snappy native library not loaded
12/04/26 09:56:02 INFO mapred.JobClient: Running job: job_local_0001
12/04/26 09:56:03 INFO mapred.JobClient:  map 0% reduce 0%
12/04/26 09:56:05 INFO mapred.MapTask: io.sort.mb = 100
12/04/26 09:56:05 INFO mapred.MapTask: data buffer = 79691776/99614720
12/04/26 09:56:05 INFO mapred.MapTask: record buffer = 262144/327680
12/04/26 09:56:06 INFO mapred.MapTask: Starting flush of map output
12/04/26 09:56:06 INFO mapred.MapTask: Finished spill 0
12/04/26 09:56:06 INFO mapred.Task: Task:attempt_local_0001_m_000000_0 is done. And is in the process of commiting
12/04/26 09:56:06 INFO mapred.LocalJobRunner:
12/04/26 09:56:06 INFO mapred.Task: Task 'attempt_local_0001_m_000000_0' done.
12/04/26 09:56:06 INFO mapred.LocalJobRunner:
12/04/26 09:56:07 INFO mapred.JobClient:  map 100% reduce 0%
12/04/26 09:56:07 INFO mapred.Merger: Merging 1 sorted segments
12/04/26 09:56:07 INFO mapred.Merger: Down to the last merge-pass, with 1 segments left of total size: 349 bytes
12/04/26 09:56:07 INFO mapred.LocalJobRunner:
12/04/26 09:56:07 INFO mapred.Task: Task:attempt_local_0001_r_000000_0 is done. And is in the process of commiting
12/04/26 09:56:07 INFO mapred.LocalJobRunner:
12/04/26 09:56:07 INFO mapred.Task: Task attempt_local_0001_r_000000_0 is allowed to commit now
12/04/26 09:56:07 INFO output.FileOutputCommitter: Saved output of task 'attempt_local_0001_r_000000_0' to tmp/output
12/04/26 09:56:07 INFO mapred.LocalJobRunner: reduce > reduce
12/04/26 09:56:07 INFO mapred.Task: Task 'attempt_local_0001_r_000000_0' done.
12/04/26 09:56:08 INFO mapred.JobClient:  map 100% reduce 100%
12/04/26 09:56:08 INFO mapred.JobClient: Job complete: job_local_0001
12/04/26 09:56:08 INFO mapred.JobClient: Counters: 13
12/04/26 09:56:08 INFO mapred.JobClient:   FileSystemCounters
12/04/26 09:56:08 INFO mapred.JobClient:     FILE_BYTES_READ=889
12/04/26 09:56:08 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=93252
12/04/26 09:56:08 INFO mapred.JobClient:   Map-Reduce Framework
12/04/26 09:56:08 INFO mapred.JobClient:     Reduce input groups=16
12/04/26 09:56:08 INFO mapred.JobClient:     Combine output records=0
12/04/26 09:56:08 INFO mapred.JobClient:     Map input records=1
12/04/26 09:56:08 INFO mapred.JobClient:     Reduce shuffle bytes=0
12/04/26 09:56:08 INFO mapred.JobClient:     Reduce output records=16
12/04/26 09:56:08 INFO mapred.JobClient:     Spilled Records=46
12/04/26 09:56:08 INFO mapred.JobClient:     Map output bytes=301
12/04/26 09:56:08 INFO mapred.JobClient:     Combine input records=0
12/04/26 09:56:08 INFO mapred.JobClient:     Map output records=23
12/04/26 09:56:08 INFO mapred.JobClient:     SPLIT_RAW_BYTES=98
12/04/26 09:56:08 INFO mapred.JobClient:     Reduce input records=23

分享到:
评论

相关推荐

    Hadoop MapReduce实现tfidf源码

    本篇文章将详细讲解如何利用Hadoop MapReduce实现TF-IDF(Term Frequency-Inverse Document Frequency)算法,这是一种在信息检索和文本挖掘中用于评估一个词在文档中的重要性的统计方法。 首先,我们要理解TF-IDF...

    Hadoop mapreduce实现wordcount

    WordCount 的主要任务是统计输入文本中每个单词出现的频率。它首先将输入文本分割成单词,然后对每个单词进行计数,最后输出每个单词及其对应的数量。 3. **Map 阶段**: 在 Map 阶段,输入数据被分割成多个块...

    大数据 hadoop mapreduce 词频统计

    在这个"大数据Hadoop MapReduce词频统计"的场景中,我们利用MapReduce来统计文本中的词汇出现频率。这是数据分析中一个常见的任务,有助于理解文本内容的概貌。Map阶段的任务是对输入的文本进行分词,并形成&lt;单词, 1...

    基于hadoop实现输出出现频率最高的20个词

    通过以上步骤,我们能够利用Hadoop MapReduce框架以及多Job级联的技术实现找出文本中出现频率最高的前N个词的目标。这种方法不仅适用于大规模数据集的处理,还能有效地提高数据处理的效率和准确性。此外,使用新API...

    Hadoop mapreduce 实现NaiveBayes朴素贝叶斯

    本主题将深入探讨如何使用 Hadoop MapReduce 实现 NaiveBayes 朴素贝叶斯算法,这是一种经典的概率分类模型,常用于文本分类、垃圾邮件过滤等领域。 NaiveBayes 朴素贝叶斯算法基于贝叶斯定理,其“朴素”在于假设...

    mapreduce在hadoop实现词统计和列式统计

    词统计是MapReduce的一个经典应用,用于计算文本文件中各个单词出现的频率。在Hadoop的mrwordcount工程中,它通常包含以下步骤: 1. **Mapper**:Mapper读取文本文件,逐行处理。对于每一行,它会将单词作为键,...

    hadoop MapReduce编程教程

    - **WordCount**:这是一个经典的MapReduce示例程序,用于统计文本文件中各个单词出现的频率。 - **映射阶段**:读取输入文本,将每一行文本按单词拆分,并为每个单词生成键值对(单词, 1)。 - **化简阶段**:...

    MapReduce实现单词计数并排序.zip_mapReduce_云计算_单词计数_统计单词_输出前三

    在"MapReduce实现单词计数并排序.java"文件中,你可以找到具体的实现细节,包括Mapper类、Reducer类以及主程序,它们共同完成了从读取输入数据、解析文本、计算单词频率到输出结果的整个流程。 总结起来,这个...

    Hadoop MapReduce 入门

    - **WordCount 示例**: MapReduce 最经典的示例之一,用于统计文本中单词出现的频率。 - **实现步骤**: - Map 阶段: 将文本分割成单词,并为每个单词计数。 - Reduce 阶段: 合并所有 map 任务的结果,输出每个单词...

    大数据MapReduce实现基于白名单的Word Count

    总结来说,“大数据MapReduce实现基于白名单的Word Count”是一个利用Hadoop MapReduce框架,结合白名单过滤机制,对大规模文本数据进行定制化词频统计的过程。这一方法有助于高效地获取和分析特定词汇的出现信息,...

    Hadoop简单应用案例,包括MapReduce、单词统计、HDFS基本操作、web日志分析、Zookeeper基本使用

    本案例将详细介绍Hadoop的一些基本应用,包括MapReduce、单词统计、HDFS的基本操作、web日志分析以及Zookeeper的使用,同时也涵盖了Hive的简单操作。 1. **MapReduce**:MapReduce是Hadoop处理大规模数据的核心组件...

    MapReduce 2.0

    为了更好地理解MapReduce编程模型,可以以WordCount程序为例,该程序统计文本数据中单词出现的频率。在Map阶段,每个Mapper读取文本数据,分割单词并为每个单词生成一个键值对,其中键是单词,值是1。在Reduce阶段,...

    大数据实验四-MapReduce编程实践

    2. **实现统计HDFS系统中多个文本文件中的单词出现频率**:通过实际操作,体验MapReduce在处理大数据集时的高效性。 #### 二、实验过程详解 ##### 1. 在本地创建多个文本文件并上传到Hadoop - **创建本地存放文件...

    mapreduce案例文本文件.zip

    在这个案例中,作者可能会讲解如何使用MapReduce来处理文本数据,比如统计单词频率、查找特定模式或者进行数据清洗。Map阶段通常涉及将输入数据分割成多个块,然后对每个块应用用户定义的映射函数,该函数将原始数据...

    精选_大数据Hadoop平台2-3、MapReduce_源码打包

    WordCount是MapReduce的经典应用,用于统计文本中单词出现的频率。在Python版本中,Mapper会接收到文本行,分割单词,并为每个单词生成一个键值对(&lt;单词, 1&gt;)。Reducer则会将所有相同的单词键值对聚合起来,累加...

    基于Hadoop实现朴素贝叶斯文本分类器.zip

    最后,利用这些概率统计信息构建朴素贝叶斯分类器,当有新的文本数据需要分类时,同样通过MapReduce框架进行预测。 在这个项目中,“Hadoop-Naive-Bayes-main”可能包含了实现这个功能的源代码。源码可能包括了数据...

    WordCount:使用 Hadoop MapReduce 框架的字数统计

    总结来说,Hadoop MapReduce的WordCount任务展示了如何利用分布式计算处理大量文本数据,统计每个单词的出现频率。通过理解并实现这个例子,开发者可以更好地掌握MapReduce的工作原理和Java编程在大数据处理中的应用...

    MapReduce读取单词个数.rar

    总结一下,这个“MapReduce读取单词个数”的案例是一个典型的Hadoop MapReduce应用,它展示了如何利用分布式计算处理大量文本数据,统计其中的单词出现频率。整个流程涉及Maven项目构建、生成jar包、上传到Hadoop...

Global site tag (gtag.js) - Google Analytics