zoukankan      html  css  js  c++  java
  • MapReduce Java API实例-统计出现过的单词

    场景

    MapReduce Java API实例-统计单词出现频率:

    https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119410169

    在上面是统计出现过的单词以及出现的次数。

    如果只是从中统计出现过的单词,即类似于求单词集合的并集的效果。

    注:

    博客:
    https://blog.csdn.net/badao_liumang_qizhi
    关注公众号
    霸道的程序猿
    获取编程相关电子书、教程推送与免费下载。

    实现

    与统计单词频率相比,只是将最终结果的出现次数去掉,因此只需将WorldCount

    中reduce函数输出value的值设置为NullWriable即可,同时将Job的OutputValue

    类型设置为NullWritable。

    1、数据集修改如下:

    2、新建map

    package com.badao.worldunion;
    
    
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Mapper;
    
    import java.io.IOException;
    import java.util.StringTokenizer;
    
    public class WorldUnionMapper extends Mapper<Object,Text,Text,IntWritable> {
        //1、编写map函数,通过继承Mapper类实现里面的map函数
        //   Mapper类当中的第一个函数是Object,也可以写成Long
        //   第一个参数对应的值是行偏移量
    
        //2、第二个参数类型通常是Text类型,Text是Hadoop实现的String 类型的可写类型
        //   第二个参数对应的值是每行字符串
    
        //3、第三个参数表示的是输出key的数据类型
    
        //4、第四个参数表示的是输出value的数据类型,IntWriable 是Hadoop实现的int类型的可写数据类型
    
        public final static IntWritable one = new IntWritable(1);
        public Text word = new Text();
    
        //key 是行偏移量
        //value是每行字符串
        @Override
        public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
            StringTokenizer stringTokenizer = new StringTokenizer(value.toString());
            while (stringTokenizer.hasMoreTokens())
            {
                //stringTokenizer.nextToken()是字符串类型,使用set函数完成字符串到Text数据类型的转换
                word.set(stringTokenizer.nextToken());
                //通过write函数写入到本地文件
                context.write(word,one);
            }
        }
    }

    3、新建reduce

    package com.badao.worldunion;
    
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.NullWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Reducer;
    
    import java.io.IOException;
    
    
    //第一个参数类型是输入值key的数据类型,map中间输出key的数据类型
    //第二个参数类型是输入值value的数据类型,map中间输出value的数据类型
    //第三个参数类型是输出值key的数据类型,他的数据类型要跟job.setOutputKeyClass(Text.class) 保持一致
    //第四个参数类型是输出值value的数据类型,它的数据类型要跟job.setOutputValueClass(IntWriable.class) 保持一致
    
    public class WordUnionReducer extends Reducer<Text, IntWritable,Text, NullWritable> {
    
        public IntWritable result = new IntWritable();
    
    
        //key就是单词  values是单词出现频率列表
        @Override
        public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
    
            NullWritable a = null;
            context.write(key,a);
        }
    }

    4、新建job

    package com.badao.worldunion;
    
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.NullWritable;
    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;
    import org.apache.hadoop.mapreduce.lib.reduce.IntSumReducer;
    
    import java.io.IOException;
    
    public class WorldUnionJob {
        public static void main(String[] args) throws InterruptedException, IOException, ClassNotFoundException {
            wordCountLocal();
        }
    
        public static void wordCountLocal()throws IOException, ClassNotFoundException, InterruptedException
        {
            Configuration conf = new Configuration();
            //实例化一个作业,word count是作业的名字
            Job job = Job.getInstance(conf, "wordunion");
            //指定通过哪个类找到对应的jar包
            job.setJarByClass(WorldUnionJob.class);
            //为job设置Mapper类
            job.setMapperClass(WorldUnionMapper.class);
            //为job设置reduce类
            job.setReducerClass(WordUnionReducer.class);
            //设置map的输出 value的数据类型
            job.setMapOutputValueClass(IntWritable.class);
            //为job的输出数据设置key类
            job.setOutputKeyClass(Text.class);
            //为job输出设置value类
            job.setOutputValueClass(NullWritable.class);
            //为job设置输入路径,输入路径是存在的文件夹/文件
            FileInputFormat.addInputPath(job,new Path("D:\wordsunion.txt"));
            //为job设置输出路径
            FileOutputFormat.setOutputPath(job,new Path("D:\worldunion4"));
            job.waitForCompletion(true);
        }
    
    
    }

    运行job查看结果

     

    博客园: https://www.cnblogs.com/badaoliumangqizhi/ 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。
  • 相关阅读:
    .Net 平台下的互联网架构新思考
    图形化机构树静态页面
    互联网应用架构谈
    解决android调用IIS Express中的WCF服务时,出现错误400问题
    远程连接sql server 数据库的方法
    WPF样式——多条件触发器
    Ubuntu 16.04 安装 RabbitMQ
    session共享个人小结
    Nginx负载均衡配置
    MySQL数据库设置主从同步
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/15102369.html
Copyright © 2011-2022 走看看