




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Hadoop大数据处理实战第10章天气数据分析实战本章导读本章将综合运用前面所学知识来开发一个天气数据分析应用案例。首先,介绍天气数据源的分析与采集方法,包括天气网的网页分析、MySQL表和Hive表的设计与创建、数据的导入和导出等。然后,介绍数据的预处理方法,包括缺失值和重复值的处理、数据格式化和数据分区等。最后,利用MapReduce和Hive对处理后的数据进行初步分析,得出结论。学习目标020304掌握网站页面的分析方法。掌握数据采集工具的使用方法。掌握导入和导出数据的方法。掌握数据预处理的方法。掌握数据分析的一般方法。0102案例简介数据采集目录CONTENTS数据预处理0304数据分析01案例分析案例分析10.1.1背景介绍天气是指影响人类活动的瞬间气象特点的综合状况。它是一定区域、短时段内的气象变化,如温度、湿度、气压、降水等。天气与人们的生活(如衣食住行)息息相关,它不仅影响着人们的出行方式,还影响着人们对
衣物的需求。天气的数据量是十分庞大的。举例来说,我国有23个省、4个直辖市、5个自治区和2个特别行政区,而每个省又包括多个市,每个市可能还包括多个乡镇。天气的数据既可以按照乡镇作为特定区域进行统计,也可以扩大至市进行统计。另外,从时间角度来看,可以统计每个小时的天气数据,也可以简单汇总一天的数据。随着时间的积累,全国各地的天气数据量就会越来越大,那么数据的存储就成了问题。案例分析Hadoop可为海量数据提供可靠的数据存储服务,以及并行数据处理服务。因此,可以利用Hadoop技术来存储海量天气数据,并从天气数据中提取有价值的信息,从而为人类提供更加优质的服务。在交通领域,目前已有国际汽车公司希望利用气象大数据(如团雾、道路结冰等恶劣天气数据)提高自动驾驶的可靠性;在零售领域,Weather
Channel曾帮助沃尔玛更好地制定了销售和发展计划,如利用沃尔玛的销售数据、订单信息等与天气数据结合分析。案例分析10.1.2案例目的天气数据分析案例的主要目的是通过网络爬虫(即数据采集器,是一种按照一定的规则自动抓取万维网信息的程序或脚本)获取到天气数据,并将获取到的天气数据存储到HDFS中,然后利用
MapReduce和Hive技术来分析天气数据,找出数据背后的规律。案例分析10.1.3案例流程天气数据分析案例可分为6个步骤分析天气网站分析数据来源的网页,以提取可采集的数据;获取历史数据构建数据爬虫规则以批量获取数据;导出数据将获取到的数据导入关系型数据库(如MySQL);迁移数据将关系型数据库中的数据导入Hadoop集群(如Hive表对应的HDFS目录);数据预处理与数据计算利用Hive或MapReduce对天气数据进行离线数据处理;数据可视化将数据处理结果以可视化形式(如Excel、Python、R等)展现出来。02数据采集数据采集10.2.1分析页面1.浏览天气网站(1)打开天气网首页(https://),在导航栏中选择“天气”→“历史天气”选项。天气网首页数据采集(2)在打开的“历史天气查询”页面中,选择一个要查询的城市(可直接单击城市名称超链接,也可通过右上角的搜索框查找相应城市),此处单击“北京”超链接。“历史天气查询”页面数据采集(3)在打开的“北京历史天气”页面中,找到“北京历史天气详情”栏,然后单击要查看的月份超链接,此处单击“2019年01月天气”超链接。“北京历史天气详情”栏数据采集(4)在打开的页面中会显示北京2019年01月份的天气详情。北京2019年01月份天气详情数据采集2.分析数据页面由上图可以观察到多种与天气相关的有价值的数据,如日期、最高气温、最低气温、天气和风向等,并且可显示当月的全部天气数据。另外,可以通过纵向对比和横向对比的方式来分析历史天气静态网页的网址规律。(1)相同城市的历史天气数据按日期(由年和月组成)形成纵向对比,如北京市2019年01月份和02月份的历史天气数据的网址分别为/beijing/201901.html和/beijing/201902.html。由此可以发现一个规律,相同城市且不同日期的网址仅仅只有网页名称不同,如201901.html和201902.html是以年和月作为静态网页的名称,所以北京市的历史天气数据的网址可以用“/beijing/年月.html”表示。数据采集(2)相同日期的历史天气数据按城市名形成横向对比,如北京市和杭州市2019年01月份的历史天气数据的网址分别为/beijing/201901.html和/hangzhou/201901.html。由此可以发现一个规律,不同城市且相同日期的网址仅仅只有路径中的城市名称不同,如beijing和hangzhou,所以各城市的历史天气数据的网址可以用“/城市/201901.html”表示。综上可知,天气网的历史天气页面的地址为“/城市/年月.html”。数据采集10.2.2采集数据1.安装数据采集器首先通过页面https:///download/windows下载八爪鱼数据采集器安装包(如“八爪鱼采集器8.0.6.zip”),将安装包解压后,双击其中的“八爪鱼采集器Setup
8.0.6.exe”文件进行安装。安装完成后,启动八爪鱼采集器。然后根据提示注册一个账号,并用其进行登录。八爪鱼采集器登录界面数据采集2.新建数据采集任务(1)单击左侧列表框中的“新建”按钮,然后在弹出的列表中选择“自定义任务”选项。新建自定义任务数据采集此时右侧区域会显示“任务:新建任务”界面,在“采集网址”一栏选择“批量生成”选项并编辑网址格式。编辑完成后,单击“保存设置”按钮。新建天气数据采集任务数据采集(2)此时会弹出提示框“已完成网址生成,现在可以开始编辑任务了”,单击“确定”按钮,显示任务页面。首先单击页面中的“查看更多”按钮(显示本月全部天气记录),然后单击“智能提示”对话框中的“点击该元素”超链接。让页面显示本月全部天气记录数据采集单击“日期”列下方的第1个单元格“2016-01-01星期五”,再依次单击“智能提示”对话框中的“选中全部”超链接、“采集以下元素文本”超链接。设置采集字段1数据采集重复同样的操作,通过依次单击右侧4个单元格,采集右侧4列(即最高气温、最低气温、天气和风向)对应的数据,以设置采集字段2~5。最后,先单击“北京2016年1月份天气统计”区域,再单击“智能提示”对话框中的“采集该元素的文本”超链接,以设置采集字段6。设置采集字段6数据采集(3)单击任务页面右上角的“流程”开关按钮将其开启。首先,将任务名称修改为“历史天气—全球天气网”。修改任务名称数据采集然后,修改各个采集字段的名称。修改字段名称数据采集弹出的对话框接下来,需要格式化各个字段的数据。单击“日期”字段右侧的“自定义数据字段”按钮,在中选择“格式化数据”选项,再在下一个对话框中单击“添加步骤”按钮。格式化数据(上)数据采集在弹出的“请选择一个操作”对话框中选择“正则表达式替换”选项,在
“RegReplace”对话框中编辑相关参数后,单击“确定”按钮,再在返回的对话框中单击“确定”按钮。格式化数据(下)数据采集按照同样的方法,对“最高气温”和“最低气温”字段进行格式化数据操作,它们在“请选择一个操作”对话框中选择“替换”选项,相关参数设置如下图所示。(a)
(b)“最高气温”和“最低气温”字段的格式化数据操作(a)最高气温(b)最低气温数据采集按照同样的方法,对“天气”和“风向”字段进行格式化数据操作,它们在“请选择一个操作”对话框中选择
“替换”选项,相关参数设置如下图所示。(a)(b)“天气”和“风向”字段的格式化数据操作(a)天气(b)风向数据采集按照同样的方法,对“城市”字段进行格式化数据操作,在“请选择一个操作”对话框中选择“去除空格”选项,相关参数设置如右图所示。“城市”字段的格式化数据操作各个字段完成格式化数据操作后,结果如下图所示。完成格式化数据操作后的各个字段数据采集(4)单击任务页面右上角的“数据预览”开关按钮将其开启,可查看获取数据的形式。单击“保存”按钮,保存当前数据采集任务。数据预览数据采集3.开始采集数据单击“开始采集”按钮,弹出“运行任务”对话框,单击“启动本地采集”按钮,如左图所示,开始采集数据。耐心等待一段时间,即可完成采集,如右图所示。“运行任务”对话框采集完成数据采集4.将采集数据导入MySQL首先在hadoop0节点的MySQL中新建一个“mydb”数据库,并在该数据库中新建一个“weather”表,然后使用八爪鱼采集器将采集到的数据导入MySQL中的“weather”表。(1)根据详情页的数据分析,设计一个“weather”表,表的列为w_date、hmax、hmin、weathertype、windy和city。MySQL中的“weather”表列名数据类型描述w_datevarchar日期(主键)hmaxvarchar最高气温hminvarchar最低气温weathertypevarchar天气类型windyvarchar风cityvarchar城市数据采集在hadoop0节点上启动MySQL,然后执行以下命令,创建一个名称为“mydb”的数据库并应用该数据库:mysql>
CREATE
DATABASE
mydb
CHARACTER
SET
utf8;mysql>
use
mydb;接下来,执行以下命令,在“mydb”数据库下创建一个名称为“weather”的表:
mysql>CREATE
TABLE
weather(->
`w_date`
varchar(255)
DEFAULT
NULL,->
`hmax`
varchar(255)
DEFAULT
NULL,->
`hmin`
varchar(255)
DEFAULT
NULL,->
`weathertype`
varchar(255)
DEFAULT
NULL,->
`windy`
varchar(255)
DEFAULT
NULL,->
`city`
varchar(255)
DEFAULT
NULL->
)
ENGINE=InnoDB
DEFAULT
CHARSET=utf8;数据采集(2)在八爪鱼采集器的采集完成对话框中,单击“导出数据”按钮,弹出
“导出本地数据(历史天气—全球天气网)”对话框,选择导出到数据库
MySQL,然后单击“确定”按钮。选择导出到数据库MySQL(3)显示设置MySQL数据库信息界面,依次指定
MySQL服务器名称、用户名称、密码及数据库名称(即mydb),然后单击“下一步”按钮。设置MySQL数据库信息数据采集(4)显示数据字段映射关系设置界面,选择
“weather”表,然后使采集数据的字段名称与
“weather”表的列一一对应,最后单击“导出”按钮。(5)导出完成后,单击“完成”按钮。设置数据字段映射关系导出完成数据采集(6)用Navicat
for
MySQL工具查看MySQL中“weather”表的数据。查看MySQL中“weather”表的数据单击“导入”按钮,也可以为MySQL中的“weather”表导入数据(数据源可以是Excel文件、CSV文件、HTML文件等)数据采集10.2.3用Sqoop将MySQL数据导入Hive首先在hadoop0节点的Hive中新建一个“weather”表,然后使用Sqoop工具将MySQL中“weather”表的数据导入
Hive中的“weather”表。(1)与MySQL中的“weather”表对应,在Hive中设计一个“weather”表,表的列为w_date、hmax、hmin、weathertype、windy和city。Hive中的“weather”表列名数据类型描述w_dateDATE日期(主键)hmaxINT最高气温hminINT最低气温weathertypeSTRING天气类型windySTRING风citySTRING城市数据采集在hadoop0节点上启动Hive,然后执行以下命令,创建一个名称为“weather”的外部表(位于default数据库):hive>
CREATE
EXTERNAL
TABLE
IF
NOT
EXISTS
weather(w_date
DATE,hmax
INT,hmin
INT,weathertype
STRING,windy
STRING,city
STRING)
ROW
FORMAT
DELIMITED
FIELDS
TERMINATED
BY
","
STORED
AS
TEXTFILE;数据采集(2)执行以下命令,使用Sqoop工具将MySQL中“weather”表的数据导入Hive中的“weather”表:#
sqoop
import
--connect
jdbc:mysql://hadoop0:3306/mydb
--username
root
--password
jqe6b6
--table
weather
--target-dir
/user/weather
--fields-terminated-by
","
--hive-import
--hive-table
weather
-m
1接下来,执行以下命令,查看Hive表中的10行数据是否存在或是否出现格式错误:hive>
SELECT
*
FROM
weather
LIMIT
10;查询结果03数据预处理数据预处理在工程实践中,采集到的数据往往存在缺失值、重复值、异常值等。因此,在使用数据之前,往往需要进行数据预处理。这里将介绍常用的数据预处理方法,包括缺失值处理、数据格式化、数据去重、数据分区等数据采集10.3.1缺失值处理对于天气数据,日期可以作为一条数据的唯一标识,所以日期的数据不允许为空(NULL,即缺失值)。要查看
w_date列中是否存在NULL,可执行以下命令:hive>
SELECT
COUNT(1)
FROM
weather
WHERE
w_date
IS
NULL;返回结果为0行(说明不存在缺失值)。查询“weather”表中w_date属性值为空的行数数据采集如果w_date列中存在缺失值,应将这些数据去除。可通过查询w_date列不为NULL的结果来创建“weather_deal1”表,以存储缺失值处理后的数据,即执行以下命令:hive>
CREATE
TABLE
weather_deal1
ASSELECT
*FROM
weatherWHERE
w_date
IS
NOT
NULL;数据采集10.3.2数据格式化数据格式化就是将表中的数据处理成价值更高的数据。如city列中的某一属性值为“北京2016年1月份天气统计”,而city属性最简练的数据形式应为“北京”。因此,可以通过正则表达式处理city列的属性值。首先,构造一个用户自定义函数“Deal”,用于格式化city,代码如下://定义规则package
jqe;import
java.util.regex.Matcher;import
java.util.regex.Pattern;import
org.apache.hadoop.hive.ql.exec.UDF;public
class
Deal
extends
UDF{private
String
result;public
String
evaluate
(String
source)
{String
regex
=
"^[\\u4e00-\\u9fa5]+";Pattern
pattern
=
Ppile(regex);数据采集Matcher
matcher
=
pattern.matcher(source);if
(matcher.find())
{result=matcher.group(0);}return
result;}public
static
void
main(String[]
args)
{System.out.println(new
Deal().evaluate("北京2016年1月份天气统计"));}}然后,将该项目打包成jar文件“Deal.jar”,并通过WinSCP软件将其上传到hadoop0节点的“/root”目录下,并执行以下命令,将“Deal.jar”文件注册到Hive中(函数别名为deal):hive>
add
jar
/root/Deal.jar;hive>
CREATE
TEMPORARY
FUNCTION
deal
AS
"jqe.Deal";数据采集除了city列需要数据格式化处理外,windy列也要按空格切分成风向(wind_direction)和风级(wind_scale)两列,可直接使用split()函数。最后,通过weather_deal1表处理后的结果创建weather_deal2表,可执行以下命令:hive>
CREATE
TABLE
weather_deal2
ASSELECT
w_date,hmax,hmin,weathertype,split(windy,"
")[0]
AS
wind_direction,split(windy,"
")[1]
AS
wind_scale,deal(city)
AS
cityFROM
weather_deal1;数据采集10.3.3数据去重日期既不能为空,也不能存在重复值。如果相同日期存在多条相同数据,只需保留一条数据。要查看同一城市的不同w_date中是否存在重复值,可执行以下命令:hive>SELECT
city,w_date,COUNT(1)c
FROM
weather
GROUP
BY
city,w_date
HAVING
c>1;要创建“weather_deal3”表以保存去重后的数据,可执行以下命令:hive>
CREATE
TABLE
weather_deal3
ASSELECT
t.w_date,t.hmax,t.hmin,t.weathertype,t.wind_direction,t.wind_scale,t.cityFROM
(SELECT
w.*,row_number()
over(DISTRIBUTE
BY
w.city,w.w_date)
as
row_numFROM
weather_deal2
w
)
tWHERE
t.row_num
=
1;数据采集10.3.4数据分区为了便于查询和管理数据,可以按照年和月对数据进行分区。例如,要创建分区表“p_weather”,可执行以下命令:hive>
CREATE
EXTERNAL
TABLE
IF
NOT
EXISTS
p_weather(w_date
DATE,hmax
INT,hmin
INT,weathertype
STRING,wind_direction
STRING,wind_scale
STRING,city
STRING)PARTITIONED
BY
(year
STRING,month
String)ROW
FORMAT
DELIMITED
FIELDS
TERMINATED
BY
",";数据采集然后,利用year()和month()函数获取日期的年和月,并将去重后的数据插入到分区表中,可执行以下命令:hive>
set
hive.exec.dynamic.partition=true;hive>
set
hive.exec.dynamic.partition.mode=nonstrict;hive>
INSERT
OVERWRITE
TABLE
p_weatherPARTITION
(year,month)SELECT
*,year(w_date)
as
year,month(w_date)
as
monthFROM
weather_deal3;04数据分析数据分析10.4.1月气温分析1.任务描述获取2019年北京市的全年天气数据,数据形式为“月份,日最高气温,日最低气温”,如“1,0,-9”;统计这些数据中每个月的最高气温和最低气温,输出结果形式为“月份,月最高气温,月最低气温”,如
“1,11,-11”;将统计结果导入Excel并绘制出柱形图。数据分析设计思路查询2019年北京市的月份、日最高气温和日最低气温等天气数据,将查询结果作为新的数据表,该表目录下的数据作为MapReduce程序的输入。在MapReduce中,Map的输入为<行偏移量,行内容>,输出为<月份,气温对象>。其中,气温对象包含了日最
高气温和日最低气温两个属性。Reduce的输入为<月份,气温对象>,按月份分别获取日最高气温列表的最大值和
日最低气温列表的最小值,输出结果为<月份,List(气温)>,其中列表中包含月最高气温和月最低气温。然后,对输出结果进行格式化,输出形式为“月份,月最高气温,月最低气温”。将输出文件导入到Excel中,绘制出柱形图。3.编程实现具体操作步骤参照书中演示。数据分析要统计各城市每月中晴天的天数,首先要在“weather”表中过滤出天气类型为“晴”的数据,并按城市、年和月进行分组来获取查询结果。为了便于查询各城市每年中晴天数最多的月份,根据之前的查询结果,分别对城市、年和晴天数进行降序排列。由于本数据集中仅有“北京”和“杭州”两个城市的数据,所以设置Reduce的数量为2,可执行以下命令:hive>
set
mapreduce.job.reduces=2;hive>
SELECT
t.city,t.sunny_num,t.year,t.monthFROM(SELECT
city,year,month,count(1)
sunny_numFROM
p_weatherWHERE
weathertype="晴"GROUP
BY
city,year,month)
tDISTRIBUTE
BY
t.citySORT
BY
city
DESC,t.year
DESC,t.sunny_num
DESC;10.4.2各城市每月中晴天的天数统计数据分析统计各城市每月中晴天的天数数据分析10.4.3北京市霾天气的初步分析北京市霾天气的数据可以从以下几方面来初步分析。例如,统计每年霾天气的天数并观察数值变化;统计每月中包含霾天气的天数,以观察霾天气主要集中的月份;分析霾天气与风向和风级的关系。统计北京市2016—2019年中霾天气的天数,可执行以下命令:hive>SELECT
year,COUNT(1)FROM
p_weatherWHERE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年京东仓库租赁合同P20
- 出租车股东权益分配合同
- 污水处理设施建设合同协议书
- 9 心中的110-有点警惕性(第1课时)(教学设计)2023-2024学年统编版道德与法治三年级上册
- 2025届高考生物备考教学设计:第一章 细胞的概述与分子组成 课时2 细胞中的无机物、糖类和脂质
- 猫咪送人合同范本
- logo设计合同范本
- 烘焙开店合同范本
- 门窗安全施工合同范本
- Lesson 9 Merry Christmas!单元整体(教学设计)-2024-2025学年接力版英语五年级上册
- 江苏2025年01月江苏省扬州生态科技新城管委会2025年招考6名劳务派遣人员笔试历年典型考题(历年真题考点)解题思路附带答案详解
- (2025)特种设备安全管理员考试题库及参考答案
- 2025年广东省广州市食品检验所事业单位招聘若干人高频重点提升(共500题)附带答案详解
- 《移动通信市场推广策略》课件
- 2024年湖南司法警官职业学院高职单招职业技能测验历年参考题库(频考版)含答案解析
- 2025年中国南光集团有限公司招聘笔试参考题库含答案解析
- 2024年湖南外贸职业学院单招职业适应性测试题库及答案解析
- 中国儿童幽门螺杆菌感染诊治专家共识2022
- 山东职业学院单招《语文》考试复习题库(含答案)
- 民政局离婚协议书模板(4篇)
- 第三讲文献的形成与流布1
评论
0/150
提交评论