MapReduce实现词频统计

这篇具有很好参考价值的文章主要介绍了MapReduce实现词频统计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

cd /usr/local/eclipse
./eclipse

创建一个java工程命名为WordCount,点击next加载jar包
MapReduce实现词频统计
选中Libraries点击Add External JARS加载jar包
MapReduce实现词频统计
为了编写一个MapReduce程序,一般需要向Java工程中添加以下JAR包:
(1)“/usr/local/hadoop/share/hadoop/common”目录下的hadoop-common-3.0.3.jar和haoop-nfs-3.0.3.jar;
(2)“/usr/local/hadoop/share/hadoop/common/lib”目录下的所有JAR包;
(3)“/usr/local/hadoop/share/hadoop/mapreduce”目录下的所有JAR包,但是,不包括jdiff、lib、lib-examples和sources目录;
(4)“/usr/local/hadoop/share/hadoop/mapreduce/lib”目录下的所有JAR包。
MapReduce实现词频统计
3. 编写Java应用程序

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.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
public class WordCount {
    public WordCount() {
    }
     public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        String[] otherArgs = (new GenericOptionsParser(conf, args)).getRemainingArgs();
        if(otherArgs.length < 2) {
            System.err.println("Usage: wordcount <in> [<in>...] <out>");
            System.exit(2);
        }
        Job job = Job.getInstance(conf, "word count");
        job.setJarByClass(WordCount.class);
        job.setMapperClass(WordCount.TokenizerMapper.class);
        job.setCombinerClass(WordCount.IntSumReducer.class);
        job.setReducerClass(WordCount.IntSumReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class); 
        for(int i = 0; i < otherArgs.length - 1; ++i) {
            FileInputFormat.addInputPath(job, new Path(otherArgs[i]));
        }
        FileOutputFormat.setOutputPath(job, new Path(otherArgs[otherArgs.length - 1]));
        System.exit(job.waitForCompletion(true)?0:1);
    }
    public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
        private static final IntWritable one = new IntWritable(1);
        private Text word = new Text();
        public TokenizerMapper() {
        }
        public void map(Object key, Text value, Mapper<Object, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {
            StringTokenizer itr = new StringTokenizer(value.toString()); 
            while(itr.hasMoreTokens()) {
                this.word.set(itr.nextToken());
                context.write(this.word, one);
            }
        }
    }
public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
        private IntWritable result = new IntWritable();
        public IntSumReducer() {
        }
        public void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
            int sum = 0;
            IntWritable val;
            for(Iterator i$ = values.iterator(); i$.hasNext(); sum += val.get()) {
                val = (IntWritable)i$.next();
            }
            this.result.set(sum);
            context.write(key, this.result);
        }
    }
}

MapReduce实现词频统计
4. 编译打包程序
可以直接点击Eclipse工作界面上部的运行程序的快捷按钮,当把鼠标移动到该按钮上时,在弹出的菜单中选择“Run as”,继续在弹出来的菜单中选择“Java Application”,然后可以把Java应用程序打包生成JAR包,部署到Hadoop平台上运行。现在可以把词频统计程序放在“/usr/local/hadoop/WordCount”目录下。可以用如下命令创建WordCount目录

cd /usr/local/hadoop
mkdir WordCount

在工程名称“WordCount”上点击鼠标右键,在弹出的菜单中选择“Export”,然后选择Runnable JAR file,并将其jar包保存在WordCount目录下,中间过程出现提示选择ok即可。
MapReduce实现词频统计
然后可以使用如下命令查看jar包是否保存在WordCount目录下

cd /usr/local/hadoop/WordCount
ls

MapReduce实现词频统计
5.运行程序
运行程序之前需要先使用如下命令启动hadoop平台

cd /usr/local/hadoop
./sbin/start-dfs.sh

登录hadoop平台之后可以用如下命令在hdfs创建两个目录input和output

./bin/hdfs dfs -mkdir /input
./bin/hdfs dfs -mkdir /output
./bin/hdfs dfs -ls /

MapReduce实现词频统计
MapReduce实现词频统计
再使用如下命令将之前创建的wordfile1.txt和wordfile2.txt两个文件上传道hadoop平台的input目录下

./bin/hdfs dfs -put /home/hadoop/wordfile1.txt /input
./bin/hdfs dfs -put /home/hadoop/wordfile2.txt /input
./bin/hdfs dfs -ls /input

(这里如果input前面不加“/”表示的是在hdfs中的/user/hadoop/input目录,加上“/”直接就是hdfs中的/input目录
MapReduce实现词频统计
然后使用如下命令开始运行程序

cd /usr/local/hadoop
./bin/hadoop jar ./WordCount/WordCount.jar /input output

(./WordCount/WordCount.jar表示在/usr/local/hadoop/WordCount目录下的WordCount.jar文件,如果WordCount.jar文件在家目录应改为如下命令)

cd /usr/local/hadoop
./bin/hadoop jar /home/hadoop/WordCount/WordCount.jar /input /output

运行成功后出现如下页面
MapReduce实现词频统计
运行结束后可以查看output目录下多了两个文件
MapReduce实现词频统计
词频统计结果已经保存在了hdfs中的/output目录下,使用如下命令查看运行结果

cd /usr/local/hadoop
./bin/hdfs dfs -cat /output
./bin/hdfs dfs -cat /output/part-r-00000

如果运行失败使用如下命令之后再运行上述代码

./bin/hdfs dfs -rm -r /output

运行结果如下图所示
MapReduce实现词频统计文章来源地址https://www.toymoban.com/news/detail-419908.html

到了这里,关于MapReduce实现词频统计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 词频的统计

    任务8、词频统计 -参看本博《经典案例【词频统计】十一种实现方式》 -针对单词文本文件,统计每个单词出现的次数 hello hadoop hello spark i love you hadoop and spark i learn hadoop and scala -思路:读取文件,通过拆分得到单词数组,定义一个哈希映射保存词频统计结果,遍历单词数组,

    2024年02月09日
    浏览(39)
  • Spark实战:词频统计

    1、分步完成词频统计 (1)基于文本文件创建RDD 执行命令: val lines = sc.textFile(\\\"/home/test.txt\\\") (2)按空格拆分作扁平化映射 执行命令: val words = lines.flatMap(_.split(\\\" \\\")) (3)将单词数组映射成二元组数组 执行命令: val tuplewords = words.map((_, 1)) (4)将二元组数组按键归约 执行命

    2024年04月28日
    浏览(37)
  • Hadoop 实战 | 词频统计WordCount

    通过分析大量文本数据中的词频,可以识别常见词汇和短语,从而抽取文本的关键信息和概要,有助于识别文本中频繁出现的,这对于理解文本内容和主题非常关键。同时,通过分析词在文本中的相对频率,可以帮助理解词在不同上下文中的含义和语境。 \\\"纽约时报\\\"评

    2024年02月02日
    浏览(42)
  • 东南亚语种分词和词频统计

    项目有一个需求,需要对16万缅甸语新闻做词频统计。首先是分词工具的选择和使用,然后是词频统计。 工具有voyant-tools、myanmar-tokenizer以及我使用的es的icu_analyzer。 结果是voyant-tools基于java,看不懂怎么用,听闻和myanmar-tokenizer一样会把词分得很细。icu_analyzer可以分得粗,音

    2024年02月09日
    浏览(52)
  • 使用hadoop进行词频统计测试案例

    1首先hadoop集群环境,使用jps’查看服务启动情况 1.1使用 start-all.sh 启动Hadoop集群环境   1..2使用jps查看服务启动情况  2创建一个需要进行处理的数据文件:word.txt 2.1 为了方便管理,首先创建一个文件夹(我这里创建已经创建了mydata,这个自定义)再在其下创建文件  2.2 进入

    2024年02月02日
    浏览(111)
  • Python统计词频的几种方法

    本文介绍python统计词频的几种方法,供大家参考 目录 方法一:运用集合去重方法 方法二:运用字典统计 方法三:使用计数器 说明:运用集合对文本字符串列表去重,这样统计词汇不会重复,运用列表的counts方法统计频数,将每个词汇和其出现的次数打包成一个列表加入到

    2024年02月13日
    浏览(37)
  • python使用jieba分词,词频统计,基本使用

    python采用第三方库进行中文分词,本文章只是记录文章。 1.需要下载第三方库jieba:                 cmd: pip install jieba 2.为了方便测试,在同级目录下,准备一个txt格式文件,文件名随意,这里我也是随便取的:                 文件路径可以是绝对路径,也可以是相对路

    2024年02月07日
    浏览(42)
  • 数据结构基于不同方式词频统计和查找

    实践题目 : 基于不同策略的英文单词的词频统计和检索系统 、实验目的 掌握基于顺序表的顺序查找、基于链表的顺序查找、折半查找)、二叉排序树和哈希表(包括基于开放地址法的哈希查找)   实验内容    一篇英文文章存储在一个文本文件中,然后分别基于线性表、

    2024年02月12日
    浏览(55)
  • 使用ReduceByKey在Spark中进行词频统计

    Spark采用Local模式运行,Spark版本3.2.0,Scala版本2.12,集成idea开发环境。 在执行 reduceByKey(_ + _) 这一步后,生成的 RDD 将包含每个单词及其对应的累加值,数据结构类似于 (单词, 累加值)。 在上下文中,_ + _ 表示一个匿名函数,用于对两个相同类型的值进行相加操作。在这里,

    2024年02月13日
    浏览(38)
  • 统计文本词频的几种方法(Python)

    目录 1. 单句的词频统计 2. 文章的词频统计 方法一:运用集合去重方法 方法二:运用字典统计 方法三:使用计数器 词频统计是自然语言处理的基本任务,针对一段句子、一篇文章或一组文章,统计文章中每个单词出现的次数,在此基础上发现文章的主题词、热词。 思路:首

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包