气象大数据案例项目(求各气象站的平均气温)

气象大数据案例项目(求各气象站的平均气温)

一、项目需求

现在有一份来自美国国家海洋和大气管理局的数据集,里面包含近30年每个气象站、每小时的天气预报数据,每个报告的文件大小大约15M。一共有10个气象站,每个报告文件的名字包含气象站ID,每条记录包含气温、风向、天气状况等多个字段信息。现在要求统计美国各气象站30年平均气温。

二、数据格式

一共10份气象站的数据

文档里面的数据格式,注意 -9999 说明数据缺失

三、项目开发

3.1 在windows 进行开发

  • 引入 Hadoop 依赖
xml 复制代码
<dependency>
	<groupId>org.apache.hadoop</groupId>
	<artifactId>hadoop-client</artifactId>
	<version>2.10.2</version>
</dependency>
  • 开发脚本
java 复制代码
package com.feifei.mapreduce;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileSplit;
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.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

import java.io.IOException;

public class WeatherAnalysis {
    public static class MyMapper extends Mapper<Object, Text, Text, IntWritable> {
        @Override
        protected void map(Object key, Text value, Mapper<Object, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {
            String line = value.toString();
            int temperature = Integer.parseInt(line.substring(14, 19).trim());
            if(temperature != -9999){
                FileSplit fileSplit = (FileSplit) context.getInputSplit();
                String id = fileSplit.getPath().getName().substring(5, 10);
                context.write(new Text(id), new IntWritable(temperature));
            }

        }
    }
    public static class MyReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
        private IntWritable mean = new 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 val : values) {
                sum += val.get();
            }
            mean.set(sum / count);
            context.write(key, mean);
        }
    }
    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf);
        job.setJarByClass(WeatherAnalysis.class);
        job.setJobName("WeatherAnalysis");
        job.setInputFormatClass(TextInputFormat.class);
        job.setOutputFormatClass(TextOutputFormat.class);
        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        job.setMapperClass(WeatherAnalysis.MyMapper.class);
        job.setReducerClass(WeatherAnalysis.MyReducer.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        job.waitForCompletion(true);
    }
}
  • 设置入参和保存路径

3.2 运行结果

3.3 对项目打包

java 复制代码
 mvn clean package
相关推荐
QYRese9 小时前
全球氢气压缩机市场发展前景报告:2026-2032年CAGR5.5%
大数据
四季豆339 小时前
AI时代中小企业如何低成本提升数据和知识质量?
大数据·人工智能·数据挖掘
2601_967212729 小时前
轨道式插座安全结构、认证要求与场景参数技术说明
大数据·经验分享·安全
方向研究9 小时前
日本地价百年
大数据
4SAPI10 小时前
多模态 AI 应用统一接入网关生产选型指南:4SAPI、硅基流动与 OpenRouter 的架构权衡
大数据·人工智能·架构·php·1024程序员节
richdata10 小时前
从采购承诺到库存周转:降低库存资金占用的六个计划杠杆
大数据·前端·javascript
微订校园外卖平台10 小时前
县城多门店外卖履约系统怎么做:统一后台、共享骑手池与分店对账的架构清单
大数据·架构·外卖系统·本地生活·微订
维基框架11 小时前
OpenAI GPT-6.1 Terra发布AI开始真正操作电脑,使用成本也降了
大数据·人工智能·gpt
小冯不疯11 小时前
查询旺店通货品策略实战教程:从源系统拉取到轻易云的端到端落地
java·大数据·数据库
海宇服务11 小时前
零信任架构实战:基于海宇个人大数据报告构建自动化汽车融资租赁资信核验网关
大数据·人工智能·架构·自动化