hadoop中的combine函数使用

发布时间:2017-2-27 23:47:05 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"hadoop中的combine函数使用",主要涉及到hadoop中的combine函数使用方面的内容,对于hadoop中的combine函数使用感兴趣的同学可以参考一下。

combine函数把一个map函数产生的<key,value>对(多个key, value)合并成一个新的<key2,value2>. 将新的<key2,value2>作为输入到reduce函数中。其格式与reduce函数相同。例如:将3个文件中的数值相加。file1: 1 2 3file2: 4 5 6file3: 7 8 9public class MyMapre06 { public static class Map extends MapReduceBase implements     Mapper<LongWritable, Text, Text, Text> { private Text word = new Text(); private Text val = new Text(); public void map(LongWritable key, Text value,     OutputCollector<Text, Text> output, Reporter reporter)     throws IOException {     String line = value.toString();     String bignum = new StringBuffer(line).toString();   word.set("1");   val.set(bignum);   output.collect(word, val);   } } public static class Reduce extends MapReduceBase implements   Reducer<Text, Text, Text, Text> {   public void reduce(Text key, Iterator<Text> values,     OutputCollector<Text, Text> output, Reporter reporter)     throws IOException {   BigInteger num = BigInteger.valueOf(0);   String tmp = new String();     Text v = new Text();     while (values.hasNext()) // 计算同一个key下,所有value的总和   {     tmp = values.next().toString();     num = num.add(new BigInteger(tmp));     }     String res = new StringBuffer(num.toString()).toString();   v.set(res);   output.collect(key, v); // 收集reduce输出结果   } } public static class Combiner extends MapReduceBase implements   Reducer<Text, Text, Text, Text> {   public void reduce(Text key, Iterator<Text> values,     OutputCollector<Text, Text> output, Reporter reporter)     throws IOException {   BigInteger num = BigInteger.valueOf(0);   String tmp = new String();     Text v = new Text();     while (values.hasNext()) // 计算同一个key下,所有value的总和   {     tmp = values.next().toString();     num = num.add(new BigInteger(tmp));     }     v.set(num.toString());   output.collect(key, v); // 收集reduce输出结果 } } public static void main(String[] args) throws Exception { JobConf conf = new JobConf(MyMapre06.class);   conf.setJobName("Sum");   conf.setOutputKeyClass(Text.class);   conf.setOutputValueClass(Text.class); conf.setMapperClass(Map.class); conf.setCombinerClass(Combiner.class); //使用combiner函数   conf.setReducerClass(Reduce.class);   conf.setInputFormat(TextInputFormat.class); conf.setOutputFormat(TextOutputFormat.class); FileInputFormat.setInputPaths(conf, new Path(args[0]));   FileOutputFormat.setOutputPath(conf, new Path(args[1]));   JobClient.runJob(conf); }}经过 Combiner函数, file1 为 6, file2 为 15, file3 为 24进过 Reduce函数, 输出 key 为 1 value 为 35

上一篇:MSSQL&nbsp;2008将数据库数据导出TSQL脚…
下一篇:ubuntu 关机

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。