zoukankan      html  css  js  c++  java
  • hadoop mapreduce 计算平均气温的代码,绝对原创

    1901    46
    1902    21
    1903    48
    1904    33
    1905    43
    1906    47
    1907    31
    1908    28
    1909    26
    1910    35
    1911    30
    1912    16
    1913    29
    1914    29
    1915    5
    1916    21
    1917    22
    1918    31
    1919    27
    1920    43
    1921    34
    1922    27
    1923    26
    
    以上为结果
    
    package com.teset;
    
    import java.io.IOException;
    import java.util.StringTokenizer;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.conf.Configured;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.FloatWritable;
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.LongWritable;
    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.Tool;
    import org.apache.hadoop.util.ToolRunner;
    
    public class AvgTemprature extends Configured implements Tool {
    
     public static class AvgMapper extends
       Mapper<LongWritable, Text, Text, IntWritable> {
    
      @Override
      protected void map(LongWritable key, Text value,
        Mapper<LongWritable, Text, Text, IntWritable>.Context context)
        throws IOException, InterruptedException {
       // map处理数据
       String str = value.toString();
       String year = null;
       int temprature = 0;
       StringTokenizer tokenstr = new StringTokenizer(str);
       int i = 0;
       while (tokenstr.hasMoreTokens()) {
        String tempstr = tokenstr.nextToken();
        i++;
        if (i == 1) {
         year = tempstr;
         continue;
        } else if (i == 5 && Integer.parseInt(tempstr) != -9999) {
         temprature = Integer.parseInt(tempstr);
         context.write(new Text(year), new IntWritable(temprature));
         break;
        }
    
       }
    
      }
    
     }
    
     public static class AvgReducer extends
       Reducer<Text, IntWritable, Text, IntWritable> {
    
      @Override
      protected void reduce(Text key, Iterable<IntWritable> values,
        Reducer<Text, IntWritable, Text, IntWritable>.Context context)
        throws IOException, InterruptedException {
       int sum=0;
       int count=0;
       for (IntWritable value : values) {
        sum=sum+value.get();
        count++;
       }
       if (count!=0){
       context.write(key, new IntWritable(sum/count));
       }
      }
    
     }
    
     public static void main(String[] args) throws Exception {
      int res = ToolRunner.run(new Configuration(), new AvgTemprature(), args);
      System.exit(res);
     }
    
     @Override
     public int run(String[] arg0) throws Exception {
      Configuration conf = getConf();
      Job job = new Job(conf, "AvgTem");// 任务名
      job.setJarByClass(AvgTemprature.class);// 指定class
      // 输入和输出流
      job.setMapperClass(AvgMapper.class);// map
      job.setReducerClass(AvgReducer.class);
      FileInputFormat.addInputPath(job, new Path(arg0[0]));
      FileOutputFormat.setOutputPath(job, new Path(arg0[1]));
      job.setCombinerClass(AvgReducer.class);
      job.setOutputValueClass(IntWritable.class);
      job.setOutputKeyClass(Text.class);
      job.waitForCompletion(true);
      return job.isSuccessful() ? 0 : 1;
    
     }
    }
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    linux 回收站 路径
    Linux 让进程在后台可靠运行的几种方法
    用marquee和div+js实现首尾相连循环滚动效果
    轻型数据库SQLite结合PHP的开发
    linux系统权限修复——学生误操作!
    2009级 毕业设计 题目
    linux下硬盘uuid查看及修改设置
    创建网站地图
    用上下左右箭头键在textbox中的光标跳转
    SHELL中时间的比较
  • 原文地址:https://www.cnblogs.com/mrcharles/p/4731737.html
Copyright © 2011-2022 走看看