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

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

一、项目需求

现在有一份来自美国国家海洋和大气管理局的数据集,里面包含近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
相关推荐
陕西企来客17 分钟前
陕西企来客科技 AI 营销大模型深度解析:GEO 赛道技术优势与落地实践
大数据·人工智能·科技
石像鬼₧魂石34 分钟前
钢结构ERP管理系统 —— 玻璃拟态 · 单文件HTML(系统为开发测试虚拟数据)
大数据·数据仓库·制造·数据库开发·数据库架构
软件技术新观察36 分钟前
2026年北京教育医疗小程序与APP定制开发:十大服务商实力测评
大数据·小程序
石像鬼₧魂石1 小时前
贵州商会管理系统 —— 商协会数字化运营一站式平台
大数据·数据结构·物联网·eclipse·数据库架构
jkyy201411 小时前
深耕AI健康医疗数据智库,赋能企业构建主动健康管理新生态
大数据·人工智能·健康医疗
2601_9619460812 小时前
AI API 网关实战:从单 Key 管理到企业级多租户架构
大数据·人工智能·金融·架构·api·个人开发
大大大大晴天15 小时前
Flink CDC 深度解析:从原理到实践的全链路指南
大数据·flink
IT新视界15 小时前
Elasticsearch信创国产化替代
大数据·elasticsearch·搜索引擎
汇策研习社16 小时前
改良版ADX指标实战指南:告别传统ADX滞后、震荡误判难题
大数据·经验分享·金融·区块链·fastbull
SelectDB16 小时前
宽表元数据膨胀怎么解?Doris Segment V3 对比 Parquet、Lance
大数据·数据库·数据分析