1. 云栖社区>
  2. 技术文集>
  3. 列表>
  4. 正文

气象数据分析代码

作者:用户 来源:互联网 时间:2018-05-29 13:19:24

hadoop

气象数据分析代码 - 摘要: 本文讲的是气象数据分析代码, package hadoop.test.csc; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDate

package hadoop.test.csc;

import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
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.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
public class MaxTemeratureMapper extends Configured implements Tool {
/**  
  * 计数器
  * 用于计数各种异常数据
  */  
enum Counter 
{
  LINESKIP, //出错的行
}

@Override
public int run(String[] args) throws Exception {
  Configuration conf = getConf();
  Job job = new Job(conf, "MaxTemeratureMapper"); // 任务名
  job.setJarByClass(MaxTemeratureMapper.class); // 指定Class
  FileInputFormat.addInputPath(job, new Path(args[0])); // 输入路径
  FileOutputFormat.setOutputPath(job, new Path(args[1])); // 输出路径
  job.setMapperClass(Map.class); // 调用上面Map类作为Map任务代码
  job.setCombinerClass(Reduce.class);
        job.setReducerClass(Reduce.class);
  
  job.setOutputFormatClass(TextOutputFormat.class);
  job.setOutputKeyClass(Text.class); // 指定输出的KEY的格式
  job.setOutputValueClass(IntWritable.class); // 指定输出的VALUE的格式
  job.waitForCompletion(true);
  // 输出任务完成情况
  System.out.println("任务名称:" + job.getJobName());
  System.out.println("任务成功:" + (job.isSuccessful() ? "是" : "否"));
  System.out.println("输入行数:"
    + job.getCounters()
      .findCounter("org.apache.hadoop.mapred.Task$Counter",
        "MAP_INPUT_RECORDS").getValue());
  System.out.println("输出行数:"
    + job.getCounters()
      .findCounter("org.apache.hadoop.mapred.Task$Counter",
        "MAP_OUTPUT_RECORDS").getValue());
  System.out.println("跳过的行:"
    + job.getCounters().findCounter(Counter.LINESKIP).getValue());
  return job.isSuccessful() ? 0 : 1;
}
/**
  * MAP任务
  */
public static class Map extends
   Mapper<LongWritable, Text, Text, IntWritable> {
  public void map(LongWritable key, Text value, Context context)
    throws IOException, InterruptedException {
   String line = value.toString(); // 读取源数据
   try {
    // 数据处理
    String year = line.substring(15, 19);
    System.out.println(year);
    Text tYear = new Text(year); //
    int temperature = Integer.parseInt(line.substring(88, 93));
    IntWritable iTemperature = new IntWritable(temperature);
    context.write(tYear, iTemperature);
   } catch (java.lang.ArrayIndexOutOfBoundsException e) {
    context.getCounter(Counter.LINESKIP).increment(1); // 出错令计数器+1
    return;
   }
  }
}
/**
  * Reduce任务
  */
public static class Reduce extends
   Reducer<Text, IntWritable, Text, IntWritable> {
  public void reduce(Text key, Iterable<IntWritable> values,
    Context context) throws IOException, InterruptedException {
   int maxValue = Integer.MIN_VALUE;
   IntWritable result = new IntWritable();
   for (IntWritable var : values) {
    maxValue = Math.max(maxValue, var.get());
   }
   result.set(maxValue);
   context.write(key, result);
  }
}


/**  
  * 设置系统说明
  * 设置MapReduce任务
  */  
public static void main(String[] args) throws Exception 
{
  
  //判断参数个数是否正确
  //如果无参数运行则显示以作程序说明
  if ( args.length != 2 )
  {
   System.err.println("");
   System.err.println("Usage: MaxTemeratureMapper< input path > < output path > ");
   System.err.println("Example: hadoop jar ~/MaxTemeratureMapper.jar hdfs://10.3.19.199:9000/user/hadoop/TempratureData/  hdfs://10.3.19.199:9000/user/hadoop/TempratureData/Temerature_1_output");
   System.err.println("Counter:");
   System.err.println("\t"+"LINESKIP"+"\t"+"Lines which are too short");
   System.exit(-1);
  }
  
  //记录开始时间
  DateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
  Date start = new Date();
  
  //运行任务
  int res = ToolRunner.run(new Configuration(), new MaxTemeratureMapper(), args);
  //输出任务耗时
  Date end = new Date();
  float time =  (float) (( end.getTime() - start.getTime() ) / 60000.0) ;
  System.out.println( "任务开始:" + formatter.format(start) );
  System.out.println( "任务结束:" + formatter.format(end) );
  System.out.println( "任务耗时:" + String.valueOf( time ) + " 分钟" ); 
        System.exit(res);
}
}

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有 的相关内容,欢迎继续使用右上角搜索按钮进行搜索hadoop ,以便于您获取更多的相关知识。

图片识别OCR,将图片上的文字识别出来

...法 解决方案二: 用纯javascript或者纯jQuery 调用中国气象网的json数据的代码 解决方案三: 用纯javascript或者纯jQuery 调用中国气象网的json数据的代码 解决方案四: 用纯javascript或者纯jQuery 调用中国气象网的json数...

气象 XML 数据源应用程序开发指南-简介_XML示例

2、简介 2.1. 关于气象 XML 数据源 气象 XML 数据源(服务)允许第三方应用程序通过 weather.com® 站点请求一个 XML feed 访问一个可用的数据子集。Weather Channel Interactive 公司 (TWCi) 提供这个用于开发的免费的数据,谁要将气象数据应...

中国气象中国地区县市编码数据

前段时间osc上有人要中国气象网的地区编码数据,这里提供一下。中国气象网对地区有自己的一套编码,并非用邮编编码,这里是中国气象的中国地区编码数据,细到县区。比如:101210101,这个是杭州市城区的地区码,下面讲解...

树莓派+Nginx+MySQL打造个人气象站

...就跟大家分享之前用树莓派做服务器来搭建的一个简单的气象站。第一步:树莓派安装MySQL+nginx+php搭建服务器 先说明下我使用的设备是树莓派B+,系统为Raspbian。由于学校福利我自己有一个静态ip但是80端口被限制因此校外无法访...

form表单提交图片禁止跳转

...码: 1 2 3 4 5 6 7 8 9 10 11 12 上传赛事气象新闻13 14 15 16 17 18 上传赛事气象新闻19 20 标题:21 22 内容:23 24 图片:25 26 27 28 29 30 31 32 ...

前三篇
后三篇
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一

云服务器9.9元/月,大学必备