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

news2024/9/22 11:27:55

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

  • 一、项目需求
  • 二、数据格式
  • 三、项目开发
    • 3.1 在windows 进行开发
    • 3.2 运行结果
    • 3.3 对项目打包

一、项目需求

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

二、数据格式

在这里插入图片描述
一共10份气象站的数据
在这里插入图片描述
文档里面的数据格式,注意 -9999 说明数据缺失
在这里插入图片描述

三、项目开发

3.1 在windows 进行开发

  • 引入 Hadoop 依赖
<dependency>
	<groupId>org.apache.hadoop</groupId>
	<artifactId>hadoop-client</artifactId>
	<version>2.10.2</version>
</dependency>
  • 开发脚本
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 对项目打包

 mvn clean package

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2039121.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ 面向对象技术实战:实现基于 POSIX 线程标准封装的线程池

线程池基础概述 为什么要有线程池&#xff1f;假设没有使用线程池时&#xff0c;一个请求用一个子线程来处理。每来一个请求&#xff0c;都得创建子线程&#xff0c;子线程执行请求&#xff0c;关闭子线程。当请求量&#xff08;并发&#xff09;比较大的时候&#xff0c;频繁…

新能源遇“秋老虎”,8月第二周销量集体下滑,问界惨遭腰斩

文/王俣祺 导语&#xff1a;随着日前7月份乘用车销量的公布&#xff0c;我们发现7月并没有因6月各车企的“冲量”行为迎来反噬&#xff0c;对于这种“淡季不淡”的现象市场上一片看好。但从近日公布的8月销量数据来看&#xff0c;人们对于“秋老虎”的恐怖可以说是一无所知。随…

MySQL学习[5] ——MySQL日志

五、MySQL日志 5.1 MySQL中有哪些日志&#xff1f; MySQL中主要有三种日志&#xff1a;undo log&#xff08;回滚日志&#xff09;、redo log&#xff08;重做日志&#xff09;、binlog&#xff08;归档日志&#xff09;&#xff0c;简单介绍&#xff1a; undo log&#xff…

Redis 高级篇(分布式缓存)

一、Redis分布式缓存 单点Redis问题&#xff1a; 数据丢失&#xff08;实现Redis数据持久化&#xff09;并发能力&#xff08;搭建主从集群&#xff0c;实现读写分离&#xff09;存储能力&#xff08;搭建分片集群&#xff0c;利用插槽机制实现动态扩容&#xff09;故障恢复能…

张宇36讲重点勾划+30天保底120带刷计划

先说结论&#xff0c;张宇36讲不适合目标100分的同学去用&#xff01; 张宇36讲&#xff0c;有一个问题&#xff0c;就是内容太多了&#xff1a; 页数达到了1200多页。这个恐怖的内容量&#xff0c;恐怕没有人可以看完。 但是张宇老师一开始说&#xff0c;不会删减任何内容&…

TinyWebserver的复现与改进(5):HTTP报文的解析与响应

GitHub - yzfzzz/MyWebServer: Linux高并发服务器项目&#xff0c;参考了TinyWebServer&#xff0c;将在此基础上进行性能改进与功能增加。为方便读者学习&#xff0c;附带详细注释和博客&#xff01; TinyWebserver的复现与改进&#xff08;1&#xff09;&#xff1a;服务器环…

模型训练与验证minicpm-v

minicpm-v 模型进行微调并进行验证 训练使用混合数据集进行训练&#xff0c;对minicpm-V进行lora微调&#xff0c;微调后使用llama3_1对输出结果与标签值进行比对&#xff0c;计算准确率。 验证代码为: # URL https://swift.readthedocs.io/zh-cn/latest/LLM/VLLM%E6%8E%A8%…

PMP到底有什么用?

PMP 就是项目管理证书&#xff0c;全称是项目管理专业人士资格认证&#xff0c;对于一个在项目管理岗位混迹五年的老油条来说&#xff0c;PMP 证书是敲开项目管理岗位的第一块砖&#xff0c;每年考 PMP 的人都很多&#xff0c;要是 PMP 证书没有价值&#xff0c;还会有那么多人…

Tomcat下载安装文档

简介 Tomcat服务器软件是一个免费的开源的web应用服务器。是Apache软件基金会的一个核心项目。由Apache&#xff0c;Sun和其他一些公司及个人共同开发而成。 由于Tomcat只支持Servlet/JSP少量JavaEE规范&#xff0c;所以是一个开源免费的轻量级Web服务器。 JavaEE规范&#x…

Java IO流使用方法 (常见方法)

Java系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 文章目录 Java系列文章目录一、前言二、学习内容&#xff1a;三、问题描述四、解决方案&#xff1a;4.1 File 的使用4.2 防止乱码问题 五、总结&#xff1a;5.1 学习总结&#xff1…

IPFS、IPNS 网站部署

目录 概念IPFS 网站IPNS 网站网站迁移到 IPFS/IPNS1. 连接 Github2. 选择仓库3. 配置 Build4. 绑定域名5. 绑定 IPNS 域名6. 检查 DNSLink概念 以 https://bhitdao.com/ 为例 IPFS 网站 链接为 Hash: ipfs://bafybeifxwlnnvuhbxiszvs2kkckxkxfy36chzoy2f7nrempkpznxrudbsm/…

开源AI智能名片微信小程序:以人性洞察与资源优化为驱动的社群营销新策略

摘要&#xff1a;随着科技的飞速发展&#xff0c;特别是人工智能&#xff08;AI&#xff09;技术的广泛应用&#xff0c;传统营销模式正经历着前所未有的变革。本文旨在探讨开源AI智能名片微信小程序如何凭借其独特的功能特性&#xff0c;结合人性洞察、需求解决、资源优化以及…

CLAMP-1

一、信息收集 1、主机发现 nmap 192.168.236.0/24 2、端口扫描 nmap 192.168.236.173 -p- -A 3、目录扫描 dirb http://192.168.236.173 二、漏洞探测 访问80端口 访问 /nt4stopc/ 下面有一些问题&#xff0c;提示必须收集答案 都是一些判断题&#xff0c;对与错对应1与0&…

SQL注入(原理、分类、union、POST注入)

目录 【学习目标、重难点知识】 【学习目标】 【重难点知识】 SQL注入简介 SQL注入原理 SQL注入类型 MySQL与SQL注入的相关知识 information_schema 数据库的结构 数据库查询语句 limit的用法 需要记住的几个函数 注释符号 SQL注入探测方法 SQL注入漏洞攻击流程…

gerrit的使用

配置SSH密钥 用记事本打开电脑里以下文件&#xff0c;复制内容 在gerrit代码库设置里找到菜单 SSH Keys&#xff0c;将以上复制的内容粘贴到New SSH Key处&#xff0c;点击ADD NEW SSH KEY即可。 克隆代码 git clone ssh://..... 下载commit-msg文件 复制代码下载地址里的…

java之校验QQ号是否正确以及如何用正则表达式进行优化

public class RegexDemo {public static void main(String[] args) {String qq"123456789";System.out.println(checkQQ(qq));}public static boolean checkQQ(String qq){//规则:6位到20位之内,0不能在开头,必须全部是数字//核心思想://先把异常数据过滤//下面的…

外部排序(败者树、置换-选择排序、最佳归并树)

外部排序可能会考查相关概念、方法和排序过程&#xff0c;外部排序的算法比较复杂&#xff0c;不会在算法设计上进行考查。 一、外部排序的基本概念与方法 外部排序指待排序文件较大&#xff0c;内存一次放不下&#xff0c;需存放在外存的文件的排序。 1. 基本概念 在许多应用…

python入门之命令提示符和文本创建.py文件

1.命令提示符 程序 快捷键&#xff1a;windowsR 在安装完python以后&#xff0c;可以直接在命令提示符程序上敲代码进行初步尝试。 python解释器 计算机是不认识python代码的&#xff0c;计算机只能识别0和1这个二进制的数&#xff0c;所以需要一个翻译官“python翻译器”。 …

【Linux系列】known_hosts详解

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【Linux网络(一)】Socket编程

文章目录 1. 预备知识1.1 认识端口号1.2 初识TCP协议1.3 初识UDP协议1.4 网络字节序1.5 socket编程接口1.5.1 套接字编程的种类1.5.2 sockaddr结构体1.5.3 socket 常见API1.5.4 地址转换函数 2. 编写UDP服务器与客户端2.1 UDP服务器的创建2.2 UDP服务器接收/发送数据2.3 补充知…