基于Hive的天气情况大数据分析系统(通过hive进行大数据分析将分析的数据通过sqoop导入到mysql,通过Django基于mysql的数据做可视化)

news/2024/4/29 14:06:29/文章来源:https://blog.csdn.net/lhyandlwl/article/details/136966393

基于Hive的天气情况大数据分析系统(通过hive进行大数据分析将分析的数据通过sqoop导入到mysql,通过Django基于mysql的数据做可视化)

  1. Hive介绍:
    Hive是建立在Hadoop之上的数据仓库基础架构,它提供了类似于SQL的语言(HQL),可以对大规模数据集进行查询和分析。通过Hive,我们可以在分布式存储系统中进行复杂的数据处理和分析。

  2. Sqoop简介:
    Sqoop是一个用于在Apache Hadoop和关系型数据库之间传输数据的工具。我们可以使用Sqoop将Hive中的分析结果导出到关系型数据库中,如MySQL,以便进一步处理和可视化。

  3. Django概述:
    Django是一个高级的Python Web框架,它提供了一系列工具和库,用于快速构建Web应用程序。我们可以利用Django连接到MySQL数据库,处理数据,并将其呈现为可视化界面。

Hive大数据分析sql,基于数据创建hive表,然后进行数据分析

-- 创建数据库
CREATE DATABASE IF NOT EXISTS big_data;-- 切换到big_data数据库
USE big_data;load data local inpath '/export/server/28' INTO TABLE weather_data;
-- 创建weather_data表
CREATE TABLE IF NOT EXISTS weather_data (`date` STRING,high_temperature STRING,low_temperature STRING,weather STRING,wind_direction STRING,city STRING
)ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';-- 插入数据到weather_data表(示例数据)
INSERT INTO TABLE weather_data VALUES
(1, '2022-01-01 周六', '6°', '-7°', '晴', '西北风3级', '北京'),
(2, '2022-01-02 周日', '2°', '-7°', '多云', '南风2级', '北京');-- 创建etl_weather_data表
CREATE TABLE IF NOT EXISTS etl_weather_data (`date` STRING,day_of_week STRING,high_temperature INT,low_temperature INT,weather STRING,wind_direction STRING,wind_speed STRING,city STRING
);-- 插入数据到etl_weather_data表
INSERT INTO TABLE etl_weather_data
SELECTSUBSTR(`date`, 1, INSTR(`date`, ' ') - 1) AS `date`,SUBSTR(`date`, INSTR(`date`, ' ') + 1) AS day_of_week,CAST(SUBSTR(high_temperature, 1, INSTR(high_temperature, '°') - 1) AS INT) AS high_temperature,CAST(SUBSTR(low_temperature, 1, INSTR(low_temperature, '°') - 1) AS INT) AS low_temperature,weather,REGEXP_REPLACE(SUBSTR(wind_direction, 1, INSTR(wind_direction, '级') - 1), '[0-9]', '') AS wind_direction,SUBSTR(SUBSTR(wind_direction, INSTR(wind_direction, '风') + 1),1,1) AS wind_speed,city
FROMweather_data;-- 1.统计一年中每个城市晴天个数的top10
CREATE TABLE IF NOT EXISTS top_sunny_cities (city STRING,sunny_days_count INT
);INSERT INTO TABLE top_sunny_cities
SELECTcity,COUNT(*) AS sunny_days_count
FROMetl_weather_data
WHEREweather LIKE '%晴%'
GROUP BYcity
ORDER BYsunny_days_count DESC
LIMIT 10;-- 2.统计北京一年中每个月的温差变化
CREATE TABLE IF NOT EXISTS monthly_max_temperature_difference (month_year STRING,max_temperature_difference INT
);INSERT INTO TABLE monthly_max_temperature_difference
SELECTCONCAT(YEAR(`date`), '-', LPAD(MONTH(`date`), 2, '0')) AS month_year,MAX(high_temperature - low_temperature) AS max_temperature_difference
FROMetl_weather_data
WHEREcity = '北京'
GROUP BYYEAR(`date`), MONTH(`date`);-- 3.统计城市出现3级以上风速最多的10个城市
CREATE TABLE IF NOT EXISTS top_cities_high_wind (city STRING,high_wind_days_count INT
);INSERT INTO TABLE top_cities_high_wind
SELECTcity,COUNT(*) AS high_wind_days_count
FROMetl_weather_data
WHERECAST(wind_speed AS INT) >= 3
GROUP BYcity
ORDER BYhigh_wind_days_count DESC
LIMIT 10;

基于sqoop将数据导入到mysql中

sqoop export \--connect jdbc:mysql://192.168.138.1:3306/big_data \--username root --password '123456' \--table top_sunny_cities_sqoop \--export-dir /hive/warehouse/big_data.db/big_data.dbbig_data.db/top_sunny_cities \--input-fields-terminated-by '\001' \--input-lines-terminated-by '\n';sqoop export \--connect jdbc:mysql:// 192.168.138.1:3306/big_data \--username root --password 123456 \--table monthly_max_temperature_difference \--export-dir /user/hive/warehouse/big_data.db/big_data.dbmonthly_max_temperature_difference \--input-fields-terminated-by '\001' \--input-lines-terminated-by '\n'sqoop export \--connect jdbc:mysql:// 192.168.138.1:3306/big_data \--username root --password 123456 \--table top_cities_high_wind \--export-dir /user/hive/warehouse/big_data.db/big_data.dbtop_cities_high_wind \--input-fields-terminated-by '\001' \--input-lines-terminated-by '\n'

在这里插入图片描述

基于mysql数据使用Django做数据可视化

from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from django.shortcuts import render, redirect
from django.shortcuts import render
from pyecharts import options as opts
from pyecharts.charts import Line, Bar, Pie, Grid
# Create your views here.from django.shortcuts import render
from pyecharts.globals import ThemeTypefrom api.service.task_service import get_user, top_sunny_cities, monthly_max_temperature_difference, \top_cities_high_wind, top_rainy_cities, monthly_rainy_days, yearly_min_temperatures, daily_wind_speed, \daily_temperature_difference, register_userdef login_page(request):if request.method == 'POST':username = request.POST.get('username')password = request.POST.get('password')user = get_user(username,password)if user is not None:return redirect('home')else:return render(request, 'login.html', {'error_message': 'Invalid login credentials.'})return render(request, 'login.html')def register_view(request):# 处理注册逻辑if request.method == 'GET':username = request.GET.get('username')password = request.GET.get('password')if username and password:register_user(username,password)return HttpResponse("注册成功!")return render(request, 'register.html')  # 使用你的注册模板路径def home(request):print(2)return render(request, 'home.html')def data_analysis(request, button_id):return render(request, 'data_analysis.html', {'button_id': button_id})def data_analysis(request, button_id):# 根据按钮 ID 进行不同的处理if button_id == 1:x,y = top_sunny_cities()line_chart = (Line().add_xaxis(xaxis_data=x).add_yaxis(series_name="晴天个数", y_axis=y).set_global_opts(title_opts=opts.TitleOpts(title="一年中每个城市晴天个数的top10")))chart_html = line_chart.render_embed()button_name = "折线图"elif button_id == 2:x,y = monthly_max_temperature_difference()line_chart = (Line().add_xaxis(xaxis_data=x).add_yaxis(series_name="温差值", y_axis=y).set_global_opts(title_opts=opts.TitleOpts(title="北京一年中每个月的温差变化")))chart_html = line_chart.render_embed()button_name = "折线图"elif button_id == 3:x,y = top_cities_high_wind()bar_chart = (Bar().add_xaxis(xaxis_data=x).add_yaxis(series_name="3级风速次数",y_axis=y).set_global_opts(title_opts=opts.TitleOpts(title="出现3级以上风速的top10个城市")))chart_html = bar_chart.render_embed()button_name = "条形图"elif button_id == 4:x, y = top_rainy_cities()bar_chart = (Bar().add_xaxis(xaxis_data=x).add_yaxis(series_name="雨天数量", y_axis=y).set_global_opts(title_opts=opts.TitleOpts(title="多雨城市的top10")))chart_html = bar_chart.render_embed()button_name = "条形图"elif button_id == 5:x, y = monthly_rainy_days()pie = Pie()pie.add("", list(zip(x, y)))pie.set_global_opts(title_opts={"text": "杭州每月雨天变化", "subtext": "2022年"},legend_opts=opts.LegendOpts(orient="vertical", pos_right="right", pos_top="center"))chart_html = pie.render_embed()button_name = "饼图"elif button_id == 6:x, y = yearly_min_temperatures()line_chart = (Line().add_xaxis(xaxis_data=x).add_yaxis(series_name="温度", y_axis=y).set_global_opts(title_opts=opts.TitleOpts(title="城市一年中最低的温度top10")))chart_html = line_chart.render_embed()button_name = "折线图"elif button_id == 7:x,y=daily_temperature_difference()# 创建饼图pie = (Pie(init_opts=opts.InitOpts(width="800px", height="600px")).add(series_name="南京10月份1~10号温差变化",data_pair=list(zip(x, y)),radius=["40%", "75%"],  # 设置内外半径,实现空心效果label_opts=opts.LabelOpts(is_show=True, position="inside"),).set_global_opts(title_opts=opts.TitleOpts(title="南京10月份1~10号温差变化"),legend_opts=opts.LegendOpts(orient="vertical", pos_right="right", pos_top="center"),).set_series_opts(  # 设置系列选项,调整 is_show 阈值label_opts=opts.LabelOpts(is_show=True)))chart_html = pie.render_embed()button_name = "饼图"elif button_id == 8:x,y=daily_wind_speed()bar_chart = (Bar().add_xaxis(xaxis_data=x).add_yaxis(series_name="风速级别", y_axis=y).set_global_opts(title_opts=opts.TitleOpts(title="南京10月份每天的风速变化")))chart_html = bar_chart.render_embed()button_name = "条形图"return render(request, 'data_analysis.html', {'chart_html': chart_html, 'button_name': button_name})

展示Django项目运行结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如有遇到问题可以找小编沟通交流哦。另外小编帮忙辅导大课作业,学生毕设等。不限于python,java,大数据等。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习-生存分析:基于QHScrnomo模型的乳腺癌患者风险评估与个性化预测

一、引言 乳腺癌作为女性常见的恶性肿瘤之一,对女性健康构成威胁。随着医疗技术的不断进步,个性化医疗逐渐成为乳腺癌治疗的重要方向。通过深入研究乳腺癌患者的风险评估和个性化预测,可以帮助医生更准确地制定治疗方案,提高治疗效…

windows下QT如何集成OpenCV

说明 我在windows下使用QT Creator12创建的CMake项目,需要OpenCV的一些功能。由于安装的时候我选择的QT组件都是MInGW的,所以无法使用VS studio版本的dll库。 为什么vs的版本不能用 我安装QT选择的是MinGW版本,本地编译QT工程只能选择MinG…

零基础10 天入门 Web3之第1天

10 天入门 Web3 Web3 是互联网的下一代,它将使人们拥有自己的数据并控制自己的在线体验。Web3 基于区块链技术,该技术为安全、透明和可信的交易提供支持。我准备做一个 10 天的学习计划,可帮助大家入门 Web3: 想要一起探讨学习的…

C#全新一代医院手术麻醉系统围术期全流程源码

目录 一、麻醉学科的起源 二、麻醉前访视与评估记录单 患者基本信息 临床诊断 患者重要器官功能及疾病情况 病人体格情况分级 手术麻醉风险评估 拟施麻醉方法及辅助措施 其他需要说明的情况 访视麻醉医师签名 访视时间 与麻醉相关的检查结果 三、手术麻醉信息系统…

Redis 特性,为什么要用Redis,Redis到底是多线程还是单线程

一、Redis介绍 Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的,使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 二、特性(为什么要用Redis&#x…

地方废物回收机构管理的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssmvue等技术项目合集) 目录 1. …

Linux的学习之路:3、基础指令(2)

一、echo指令 这个指令在上篇文章我也用了但是忘了说了,这个指令的大概用法就是把后面跟的文本等输出在显示器上,如下代码所示打印的“Hello Linux” [rootVM-24-9-centos ~]# echo "Hello Linux" Hello Linux二、输出重定向与输入重定向 着…

vue前端工程化

前言 本文介绍的是有关于vue方面的前端工程化实践,主要通过实践操作让开发人员更好的理解整个前端工程化的流程。 本文通过开发准备阶段、开发阶段和开发完成三个阶段开介绍vue前端工程化的整体过程。 准备阶段 准备阶段我将其分为:框架选择、规范制…

基于单片机HX711电子秤称重控制设计

**单片机设计介绍,基于单片机HX711电子秤称重控制设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机HX711的电子秤称重控制设计是一个融合了单片机技术、称重传感器技术和显示技术的综合性项目。其设计目…

C 语言贪吃蛇源码解析

贪吃蛇是一款经典的电子游戏,玩家控制一条不断成长的蛇,需要避免撞到自己的身体或者游戏边界,同时吃掉出现在屏幕上的食物以增长身体长度。 下面是一个简单的贪吃蛇游戏的C语言实现,使用了标准输入输出库conio.h和时间库windows.h…

GTC 2024 火线评论:DPU 重构文件存储访问

编者按:英伟达2024 GTC 大会上周在美国加州召开,星辰天合 CTO 王豪迈在大会现场参与了 GPU 与存储相关的最新技术讨论,继上一篇《GTC 2024 火线评论:GPU 的高效存储利用》之后,这是他发回的第二篇评论文章。 上一篇文章…

农村分散式生活污水分质处理及循环利用技术指南

标准已完成意见征集: 本文件给出了农村分散式生活污水分质处理及循环利用的总则、污水收集、污水分质处理、资源化利用、利用模式、运维管理等的指导。 本文件适用于农村分散式生活污水分质处理及循环利用的设施新建、扩建和改建工程的设计、施工与运维。 注:本文件…

微服务demo(二)nacos服务注册与集中配置

环境:nacos1.3.0 一、服务注册 1、pom: 移步spring官网https://spring.io,查看集成Nacos所需依赖 找到对应版本点击进入查看集成说明 然后再里面找到集成配置样例,这里只截一张,其他集成内容继续向下找 我的&#x…

蓝桥杯刷题计划-洛谷-持续更新

P8598 [蓝桥杯 2013 省 AB] 错误票据 题目 #include <bits/stdc.h> #define endl \n #define int long long #define INF 0x3f3f3f3f3f const int N 1000010; using namespace std; int arr[N]; signed main() {int N;cin>>N;int idx;while(cin>>arr[idx…

数据库审计和安全

互联网、云计算、物联网等新技术的应用&#xff0c;数据安全面临前所未有的挑战!我国信息安全已从终端安全、网络安全&#xff0c;发展到数据安全建设阶段。数据安全的核心是对“数据”全方位的安全防护&#xff0c;其产品及解决方案直接涉及国家和企业的核心机密 核心数据库存…

win10微软拼音输入法 - bug - 在PATH变量为空的情况下,无法输入中文

文章目录 win10微软拼音输入法 - bug - 在PATH变量为空的情况下&#xff0c;无法输入中文概述笔记实验前提条件100%可以重现 - 无法使用win10拼音输入法输入中文替代的输入法软件备注END win10微软拼音输入法 - bug - 在PATH变量为空的情况下&#xff0c;无法输入中文 概述 在…

ES6学习之路:迭代器Iterator和生成器Generator

迭代器 一、知识背景 什么是迭代器 迭代器就是在一个数据集合中不断取出数据的过程迭代和遍历的区别 遍历是把所有数据都取出迭代器注重的是依次取出数据&#xff0c;它不会在意有多少数据&#xff0c;也不会保证能够取出多少或者能够把数据都取完。比如斐波那契额数列&#…

linux nginx配置ssl, 实现https+ip访问

mkdir sslZhengShu openssl req -newkey rsa:2048 -nodes -keyout ca.key -out ca.csr openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt openssl genrsa -out server.key 2048 openssl req -new -key server.key -out server.csr 和之前输入一样即可 …

Python基本运算

1.逻辑运算符 第四行会有黄色的下划线是因为这个不是系统推荐的写法&#xff0c;系统推荐的是第五行的链式比较&#xff1b; 2.短路求值 对于and而言&#xff0c;左边的语句是false&#xff0c;那么整体一定是false,右边的表达式就不会进行计算&#xff1b; 对于or而言&…

FTP 文件传输服务

FTP连接 控制连接&#xff1a;TCP 21&#xff0c;用于发送FTP命令信息 数据连接&#xff1a;TCP 20&#xff0c;用于上传、下载数据 数据连接的建立类型&#xff1a; 主动模式&#xff1a;服务端从 20 端口主动向客户端发起连接 被动模式&#xff1a;服务端在指定范围…