千家信息网

WordCount怎么实现单词计数

发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,这篇文章主要介绍"WordCount怎么实现单词计数",在日常操作中,相信很多人在WordCount怎么实现单词计数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Wor
千家信息网最后更新 2024年11月30日WordCount怎么实现单词计数

这篇文章主要介绍"WordCount怎么实现单词计数",在日常操作中,相信很多人在WordCount怎么实现单词计数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"WordCount怎么实现单词计数"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一:

public class WordCount {                public static class TokenizerMapper extends Mapper{                                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 {                                                //将每一行拆分成一个个的单词,并肩作为map方法的结果输出。                        StringTokenizer itr = new StringTokenizer(value.toString());                                                //  测试其是否还有更多可用的标记                        while (itr.hasMoreTokens()) {                                word.set(itr.nextToken());                                context.write(word, one);                        }                }        }        public static class IntSumReducer extends Reducer {                                private IntWritable result = new IntWritable();                /**                 * reduce函数的输入也是一个key/value的形式,不过它的value是一个迭代器的形式Iterable values,                 *            也就是说reduce的输入是一个key对应一组的值的value,reduce也有context和map的context作用一致。                 * */                public void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException {                        int sum = 0;                        for (IntWritableval : values) {                                sum += val.get();                        }                        result.set(sum);                        context.write(key, result);                }        }                public static void main(String[] arg) throws Exception {                                //初始化Configuration,该类主要是读取mapreduce系统配置信息,这些信息包括hdfs还有mapreduce等。                Configuration conf = new Configuration();                                //构建一个job,                Job job = Job.getInstance(conf,"word count");                //装载程序员编写好的计算程序                job.setJarByClass(WordCount.class);                                //实现map函数,根据输入的对生成中间结果。配置mapreduce如何运行map和reduce函数                job.setMapperClass(TokenizerMapper.class);                                //Combiner类,实现combine函数,合并中间结果中具有相同key值的键值对。 默认为null 即不合并中间结果。                job.setCombinerClass(IntSumReducer.class);                                //Reducer类 实现reduce函数 将中间结果合并,得到最终结果。                job.setReducerClass(IntSumReducer.class);                                //定义输出的key/value的类型,也就是最终存储在hdfs上结果文件的key/value的类型                job.setOutputKeyClass(Text.class);                job.setOutputValueClass(IntWritable.class);                                //第一行就是构建输入的数据文件,第二行是构建输出的数据文件,                FileInputFormat.addInputPath(job, new Path("hdfs://192.168.226.129:9000/rootdir/mapreduce.txt"));                FileOutputFormat.setOutputPath(job, new Path("hdfs://192.168.226.129:9000/rootdir/data/studytest/"+System.currentTimeMillis()+"/"));                                //如果job运行成功了,我们的程序就会正常退出                System.exit(job.waitForCompletion(true) ? 0 : 1);        }}

二:

public class WordCount1 {        public static final IntWritable ONE = new IntWritable(1);                public static class WordCountMapper extends Mapper{                @Override                protected void map(LongWritable key, Text value, Mapper.Context context)                                throws IOException, InterruptedException {                        String[] vs = value.toString().split("\\s");                        for (String string : vs) {                                context.write(new Text(string) , ONE);                        }                }                       }                        public static class WordCountReduce extends Reducer{                @Override                protected void reduce(Text key, Iterable values,                                Reducer.Context context) throws IOException, InterruptedException {                        int count =0;                        for (IntWritable v : values) {                                count += v.get();                        }                        context.write(key,new IntWritable(count) );                }                        }                public static void main(String[] args) {                try {                        Configuration conf = new Configuration();                                                Job job = Job.getInstance(conf,"word count");                        job.setJarByClass(WordCount1.class);                                                //实现map函数,根据输入的对生成中间结果。                        job.setMapperClass(WordCountMapper.class);                        job.setMapOutputKeyClass(Text.class);                        job.setMapOutputValueClass(IntWritable.class);                        job.setReducerClass(WordCountReduce.class);                        FileInputFormat.addInputPath(job, new Path("hdfs://192.168.226.129:9000/rootdir/mapreduce.txt"));                        FileOutputFormat.setOutputPath(job, new Path("hdfs://192.168.226.129:9000/rootdir/data/studytest/"+System.currentTimeMillis()+"/"));                                                System.exit(job.waitForCompletion(true) ? 0 : 1);                } catch (IllegalStateException e) {                        e.printStackTrace();                } catch (IllegalArgumentException e) {                        e.printStackTrace();                } catch (ClassNotFoundException e) {                        e.printStackTrace();                } catch (IOException e) {                        e.printStackTrace();                } catch (InterruptedException e) {                        e.printStackTrace();                }        }}

例如:

输入:

xujun xujun xj , cxj xxxxcccc ddd xujun xjyyy jjjccc yyy

输出:

,      1ccc     1cccc    1cxj     1ddd     1jjj     1xj      2xujun   3xxxx    1yyy     2

到此,关于"WordCount怎么实现单词计数"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0