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

基于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.mzph.cn/news/778763.shtml

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

相关文章

设计模式之基于接口而非实现的设计原则

概念 基于接口而非实现的设计原则是一种重要的软件设计原则,它强调在设计和开发软件时,应该更多地关注接口而非具体的实现细节。这一原则有助于实现软件的可扩展性、可维护性和灵活性。 首先,基于接口的设计原则有助于实现软件的可扩展性。…

Axios和Ajax俩者的区别

Axios 和 Ajax 都是用于发起 HTTP 请求的工具,但它们之间有一些重要的区别: Ajax: Ajax 是一种使用 JavaScript 发起异步 HTTP 请求的技术,通常通过 XMLHttpRequest 对象来实现。在使用 Ajax 时,需要手动处理请求和响应…

2015年认证杯SPSSPRO杯数学建模A题(第二阶段)绳结全过程文档及程序

2015年认证杯SPSSPRO杯数学建模 A题 绳结 原题再现: 给绳索打结是人们在日常生活中常用的技能。对登山、航海、垂钓、野外生存等专门用途,结绳更是必不可少的技能之一。针对不同用途,有多种绳结的编制方法。最简单的绳结,有时称…

机器学习和深度学习的简单对比

如图1-2所示,深度学习(DeepLearning,DL)属于机器学习的子类。它的灵感来源于人类大脑的工作方式,这是利用深度神经网络来解决特征表达的一种学习过程。深度神经网络本身并非是一个全新的概念,可理解为包含多…

实战 | 微调训练TrOCR识别弯曲文本

导 读 本文主要介绍如何通过微调训练TrOCR实现弯曲文本识别。 背景介绍 TrOCR(基于 Transformer 的光学字符识别)模型是性能最佳的 OCR 模型之一。在我们之前的文章中,我们分析了它们在单行打印和手写文本上的表现。 TrOCR—基于Transforme…

系统分析师-数学与经济管理

系统架构设计师 系统架构设计师-软件开发模型总结 文章目录 系统架构设计师前言一、最小生成树二、最短路径三、网络与最大流量四、不确定型决策 前言 数学是一种严谨、缜密的科学,学习应用数学知识,可以培养系统架构设计师的抽象思维能力和逻辑推理能…

go中函数与方法的区别与go中关于面向对象理解

声明方法的区别 函数是一段可以独立调用的代码块,它可以有参数和返回值。函数的声明不依赖于任何类型,可以直接通过函数名进行调用。 函数的声明格式如下: func functionName(parameters) returnType {// 函数体 }示例: func A…

【Python】python+requests+excel+unittest+ddt实现接口自动化实例

目录 测试需求实现思路框架代码实例1. 环境准备和配置文件2. Excel接口数据及测试结果3. API封装4. 读取Excel数据5. 测试用例6. 日志和配置文件处理7. HTMLTestRunner生成可视化的html报告8. 报告通过飞书/邮件发送报告通过飞书发送报告通过邮件发送9. 入口函数10. 飞书Webhoo…

Git 命令总览

Git Git 是一个版本控制系统,用于管理项目代码。通过 Git 可以轻松地进行代码的提交、更新和合并,确保项目代码的安全性和稳定性。同时,Git 还提供了丰富的工具和功能,如分支管理、代码审查、版本回退等,帮助开发更好…

(含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现

原生写法 // 封装组件 import React, { useState, useRef } from react;const DraggableModal ({ children }) > {const [position, setPosition] useState({ x: 0, y: 0 });const modalRef useRef(null);const handleMouseDown (e) > {const modal modalRef.curre…

五种免费的Python开发环境及具体下载网址

五种免费的Python开发环境及具体下载网址 目录 五种免费的Python开发环境及具体下载网址1.Anaconda2.PyCharm Community Edition3.Visual Studio Code4.Jupyter Notebook5. WinPython Python编程可选择不同的开发工具环境进行,本文介绍五种常用的,读者可…

adb基本命令

下载安装 adb 概述: ADB 全称为 Android Debug Bridge,起到调试桥的作用,是一个客户端-服务器端程序。其中客户端是用来操作的电脑,服务端是 Android 设备。 下载地址: Windows版本:https://dl.google.com/android/repository/pl…

vue前端工程化

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

vue做移动端自适应插件实现rem

1.实现方式 postcss-pxtorem:将px转换为rem amfe-flexible:为html、body提那家font-size,窗口调整的时候重新设置font-size 2.安装与使用 npm install amfe-flexible --save npm install postcss-pxtorem --save-dev 1.再main.js入口文件…

FOC,即Field-Oriented Control

FOC,即Field-Oriented Control,也被称为磁场导向控制或矢量控制,是一种利用变频器(VFD)来控制三相电机的技术。以下是对FOC的详细介绍,涵盖了其基本概念、控制原理、应用领域以及优缺点等方面的内容。 一、…

算法——图论:路径,回溯

. - 力扣(LeetCode) 给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序) graph[i] 是一个从节点 i 可以访问的所有节点的列表&#xff0…

GEE训练——如何实现单景影像边界的提取以sentinel和Landsat数据为例(栅格转矢量)

本教程的主要目的是如何实现单景影像边界的提取以sentinel和Landsat数据为例,很多人是项通过GEE来实现单景影像的获取过程,所以这里最重要的就是首先根据点确定影像的范围,或者根据指定的单景影像的编号来获取指定的单景影像,然后将其矢量化即可。 简介 在Google Earth E…

mysql8.x在windows server2019安装并设置主从同步难点问题

1.MySQL服务无法启动并提示“MySQL8.x本地计算机上的MySQL服务启动后停止” 1)用notepad打开my.ini文件,重新保存为ansi编码格式。 2)右键windows图标,点击“计算机管理”,点击“本地用户和组”,双击“组…

JSP技术及其应用

目录 一、JSP 指令元素 1. page指令 二、JSP 注释 1. HTML注释: 2. Java注释: 3. JSP注释: 三、页面编码格式 1. pageEncoding: 2. contentType: 一、JSP 指令元素 JSP包含三种主要的指令元素:pag…

SQL-CRUD-2数据库实验

目录 第一关任务描述 相关知识 插入完整内容的行 插入选定内容的行 编程要求 测试说明 第一关代码 第二关任务描述 相关知识 删除表中的指定行 删除表中的所有行 编程要求 测试说明 第二关代码 第三关任务描述 相关知识 更新表中的指定行 编程要求 测试说明…