我正在使用Hadoop Mapreduce来获取单词和单词计数信息。除了每个单词的计数外,我还需要找到文档中显示的每个单词的百分比。输出是这样的。 如果文件只包含三个单词" hello"," world"和" kitty"。结果应该是这样的。
字数百分比
你好40 0.4
世界50 0.5
kitty 10 0.1
我可以设置int temp = arr[i];
来计算所有单词,问题是结果将在每个单词计数返回的同时返回。将每个单词输出到hdfs时,无法计算当时的百分比。
答案 0 :(得分:1)
您可以在Mapper中设置计数器。
答案 1 :(得分:0)
job.setJarByClass(WinnerCount.class);
job.setMapperClass(WinnerCountMapper.class);
//job.setCombinerClass(WinnerCountCombiner.class);
job.setCombinerClass(WinnerCountCombiner.class);
job.setReducerClass(WinnerCountReducer.class);
job.setInputFormatClass(ChessInputFormat.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(inputPath));
FileOutputFormat.setOutputPath(job, temp);
job.waitForCompletion(true);
Counters counters = job.getCounters();
Counter total = counters.findCounter(WinnerCountMapper.MAP_COUNTER.TOTAL_TUPLE);
//System.out.println(total.getDisplayName()+":"+total.getValue());
/*if (hdfs.exists(output))
hdfs.delete(output, true);*/
Configuration conf2 = new Configuration();
conf2.set("total", total.getValue()+"");
Job job2 = Job.getInstance(conf2,"aggregation");
job2.setJarByClass(WinnerCount.class);
job2.setMapperClass(AggregationMapper.class);
job2.setReducerClass(AggregationReducer.class);
job2.setOutputKeyClass(Text.class);
job2.setOutputValueClass(Text.class);