版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Hadoop大數(shù)據(jù)處理實(shí)戰(zhàn)第10章天氣數(shù)據(jù)分析實(shí)戰(zhàn)本章導(dǎo)讀本章將綜合運(yùn)用前面所學(xué)知識(shí)來(lái)開發(fā)一個(gè)天氣數(shù)據(jù)分析應(yīng)用案例。首先,介紹天氣數(shù)據(jù)源的分析與采集方法,包括天氣網(wǎng)的網(wǎng)頁(yè)分析、MySQL表和Hive表的設(shè)計(jì)與創(chuàng)建、數(shù)據(jù)的導(dǎo)入和導(dǎo)出等。然后,介紹數(shù)據(jù)的預(yù)處理方法,包括缺失值和重復(fù)值的處理、數(shù)據(jù)格式化和數(shù)據(jù)分區(qū)等。最后,利用MapReduce和Hive對(duì)處理后的數(shù)據(jù)進(jìn)行初步分析,得出結(jié)論。學(xué)習(xí)目標(biāo)020304掌握網(wǎng)站頁(yè)面的分析方法。掌握數(shù)據(jù)采集工具的使用方法。掌握導(dǎo)入和導(dǎo)出數(shù)據(jù)的方法。掌握數(shù)據(jù)預(yù)處理的方法。掌握數(shù)據(jù)分析的一般方法。0102案例簡(jiǎn)介數(shù)據(jù)采集目錄CONTENTS數(shù)據(jù)預(yù)處理0304數(shù)據(jù)分析01案例分析案例分析10.1.1背景介紹天氣是指影響人類活動(dòng)的瞬間氣象特點(diǎn)的綜合狀況。它是一定區(qū)域、短時(shí)段內(nèi)的氣象變化,如溫度、濕度、氣壓、降水等。天氣與人們的生活(如衣食住行)息息相關(guān),它不僅影響著人們的出行方式,還影響著人們對(duì)
衣物的需求。天氣的數(shù)據(jù)量是十分龐大的。舉例來(lái)說(shuō),我國(guó)有23個(gè)省、4個(gè)直轄市、5個(gè)自治區(qū)和2個(gè)特別行政區(qū),而每個(gè)省又包括多個(gè)市,每個(gè)市可能還包括多個(gè)鄉(xiāng)鎮(zhèn)。天氣的數(shù)據(jù)既可以按照鄉(xiāng)鎮(zhèn)作為特定區(qū)域進(jìn)行統(tǒng)計(jì),也可以擴(kuò)大至市進(jìn)行統(tǒng)計(jì)。另外,從時(shí)間角度來(lái)看,可以統(tǒng)計(jì)每個(gè)小時(shí)的天氣數(shù)據(jù),也可以簡(jiǎn)單匯總一天的數(shù)據(jù)。隨著時(shí)間的積累,全國(guó)各地的天氣數(shù)據(jù)量就會(huì)越來(lái)越大,那么數(shù)據(jù)的存儲(chǔ)就成了問(wèn)題。案例分析Hadoop可為海量數(shù)據(jù)提供可靠的數(shù)據(jù)存儲(chǔ)服務(wù),以及并行數(shù)據(jù)處理服務(wù)。因此,可以利用Hadoop技術(shù)來(lái)存儲(chǔ)海量天氣數(shù)據(jù),并從天氣數(shù)據(jù)中提取有價(jià)值的信息,從而為人類提供更加優(yōu)質(zhì)的服務(wù)。在交通領(lǐng)域,目前已有國(guó)際汽車公司希望利用氣象大數(shù)據(jù)(如團(tuán)霧、道路結(jié)冰等惡劣天氣數(shù)據(jù))提高自動(dòng)駕駛的可靠性;在零售領(lǐng)域,Weather
Channel曾幫助沃爾瑪更好地制定了銷售和發(fā)展計(jì)劃,如利用沃爾瑪?shù)匿N售數(shù)據(jù)、訂單信息等與天氣數(shù)據(jù)結(jié)合分析。案例分析10.1.2案例目的天氣數(shù)據(jù)分析案例的主要目的是通過(guò)網(wǎng)絡(luò)爬蟲(即數(shù)據(jù)采集器,是一種按照一定的規(guī)則自動(dòng)抓取萬(wàn)維網(wǎng)信息的程序或腳本)獲取到天氣數(shù)據(jù),并將獲取到的天氣數(shù)據(jù)存儲(chǔ)到HDFS中,然后利用
MapReduce和Hive技術(shù)來(lái)分析天氣數(shù)據(jù),找出數(shù)據(jù)背后的規(guī)律。案例分析10.1.3案例流程天氣數(shù)據(jù)分析案例可分為6個(gè)步驟分析天氣網(wǎng)站分析數(shù)據(jù)來(lái)源的網(wǎng)頁(yè),以提取可采集的數(shù)據(jù);獲取歷史數(shù)據(jù)構(gòu)建數(shù)據(jù)爬蟲規(guī)則以批量獲取數(shù)據(jù);導(dǎo)出數(shù)據(jù)將獲取到的數(shù)據(jù)導(dǎo)入關(guān)系型數(shù)據(jù)庫(kù)(如MySQL);遷移數(shù)據(jù)將關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)入Hadoop集群(如Hive表對(duì)應(yīng)的HDFS目錄);數(shù)據(jù)預(yù)處理與數(shù)據(jù)計(jì)算利用Hive或MapReduce對(duì)天氣數(shù)據(jù)進(jìn)行離線數(shù)據(jù)處理;數(shù)據(jù)可視化將數(shù)據(jù)處理結(jié)果以可視化形式(如Excel、Python、R等)展現(xiàn)出來(lái)。02數(shù)據(jù)采集數(shù)據(jù)采集10.2.1分析頁(yè)面1.瀏覽天氣網(wǎng)站(1)打開天氣網(wǎng)首頁(yè)(https://),在導(dǎo)航欄中選擇“天氣”→“歷史天氣”選項(xiàng)。天氣網(wǎng)首頁(yè)數(shù)據(jù)采集(2)在打開的“歷史天氣查詢”頁(yè)面中,選擇一個(gè)要查詢的城市(可直接單擊城市名稱超鏈接,也可通過(guò)右上角的搜索框查找相應(yīng)城市),此處單擊“北京”超鏈接?!皻v史天氣查詢”頁(yè)面數(shù)據(jù)采集(3)在打開的“北京歷史天氣”頁(yè)面中,找到“北京歷史天氣詳情”欄,然后單擊要查看的月份超鏈接,此處單擊“2019年01月天氣”超鏈接?!氨本v史天氣詳情”欄數(shù)據(jù)采集(4)在打開的頁(yè)面中會(huì)顯示北京2019年01月份的天氣詳情。北京2019年01月份天氣詳情數(shù)據(jù)采集2.分析數(shù)據(jù)頁(yè)面由上圖可以觀察到多種與天氣相關(guān)的有價(jià)值的數(shù)據(jù),如日期、最高氣溫、最低氣溫、天氣和風(fēng)向等,并且可顯示當(dāng)月的全部天氣數(shù)據(jù)。另外,可以通過(guò)縱向?qū)Ρ群蜋M向?qū)Ρ鹊姆绞絹?lái)分析歷史天氣靜態(tài)網(wǎng)頁(yè)的網(wǎng)址規(guī)律。(1)相同城市的歷史天氣數(shù)據(jù)按日期(由年和月組成)形成縱向?qū)Ρ?,如北京?019年01月份和02月份的歷史天氣數(shù)據(jù)的網(wǎng)址分別為/beijing/201901.html和/beijing/201902.html。由此可以發(fā)現(xiàn)一個(gè)規(guī)律,相同城市且不同日期的網(wǎng)址僅僅只有網(wǎng)頁(yè)名稱不同,如201901.html和201902.html是以年和月作為靜態(tài)網(wǎng)頁(yè)的名稱,所以北京市的歷史天氣數(shù)據(jù)的網(wǎng)址可以用“/beijing/年月.html”表示。數(shù)據(jù)采集(2)相同日期的歷史天氣數(shù)據(jù)按城市名形成橫向?qū)Ρ?,如北京市和杭州?019年01月份的歷史天氣數(shù)據(jù)的網(wǎng)址分別為/beijing/201901.html和/hangzhou/201901.html。由此可以發(fā)現(xiàn)一個(gè)規(guī)律,不同城市且相同日期的網(wǎng)址僅僅只有路徑中的城市名稱不同,如beijing和hangzhou,所以各城市的歷史天氣數(shù)據(jù)的網(wǎng)址可以用“/城市/201901.html”表示。綜上可知,天氣網(wǎng)的歷史天氣頁(yè)面的地址為“/城市/年月.html”。數(shù)據(jù)采集10.2.2采集數(shù)據(jù)1.安裝數(shù)據(jù)采集器首先通過(guò)頁(yè)面https:///download/windows下載八爪魚數(shù)據(jù)采集器安裝包(如“八爪魚采集器8.0.6.zip”),將安裝包解壓后,雙擊其中的“八爪魚采集器Setup
8.0.6.exe”文件進(jìn)行安裝。安裝完成后,啟動(dòng)八爪魚采集器。然后根據(jù)提示注冊(cè)一個(gè)賬號(hào),并用其進(jìn)行登錄。八爪魚采集器登錄界面數(shù)據(jù)采集2.新建數(shù)據(jù)采集任務(wù)(1)單擊左側(cè)列表框中的“新建”按鈕,然后在彈出的列表中選擇“自定義任務(wù)”選項(xiàng)。新建自定義任務(wù)數(shù)據(jù)采集此時(shí)右側(cè)區(qū)域會(huì)顯示“任務(wù):新建任務(wù)”界面,在“采集網(wǎng)址”一欄選擇“批量生成”選項(xiàng)并編輯網(wǎng)址格式。編輯完成后,單擊“保存設(shè)置”按鈕。新建天氣數(shù)據(jù)采集任務(wù)數(shù)據(jù)采集(2)此時(shí)會(huì)彈出提示框“已完成網(wǎng)址生成,現(xiàn)在可以開始編輯任務(wù)了”,單擊“確定”按鈕,顯示任務(wù)頁(yè)面。首先單擊頁(yè)面中的“查看更多”按鈕(顯示本月全部天氣記錄),然后單擊“智能提示”對(duì)話框中的“點(diǎn)擊該元素”超鏈接。讓頁(yè)面顯示本月全部天氣記錄數(shù)據(jù)采集單擊“日期”列下方的第1個(gè)單元格“2016-01-01星期五”,再依次單擊“智能提示”對(duì)話框中的“選中全部”超鏈接、“采集以下元素文本”超鏈接。設(shè)置采集字段1數(shù)據(jù)采集重復(fù)同樣的操作,通過(guò)依次單擊右側(cè)4個(gè)單元格,采集右側(cè)4列(即最高氣溫、最低氣溫、天氣和風(fēng)向)對(duì)應(yīng)的數(shù)據(jù),以設(shè)置采集字段2~5。最后,先單擊“北京2016年1月份天氣統(tǒng)計(jì)”區(qū)域,再單擊“智能提示”對(duì)話框中的“采集該元素的文本”超鏈接,以設(shè)置采集字段6。設(shè)置采集字段6數(shù)據(jù)采集(3)單擊任務(wù)頁(yè)面右上角的“流程”開關(guān)按鈕將其開啟。首先,將任務(wù)名稱修改為“歷史天氣—全球天氣網(wǎng)”。修改任務(wù)名稱數(shù)據(jù)采集然后,修改各個(gè)采集字段的名稱。修改字段名稱數(shù)據(jù)采集彈出的對(duì)話框接下來(lái),需要格式化各個(gè)字段的數(shù)據(jù)。單擊“日期”字段右側(cè)的“自定義數(shù)據(jù)字段”按鈕,在中選擇“格式化數(shù)據(jù)”選項(xiàng),再在下一個(gè)對(duì)話框中單擊“添加步驟”按鈕。格式化數(shù)據(jù)(上)數(shù)據(jù)采集在彈出的“請(qǐng)選擇一個(gè)操作”對(duì)話框中選擇“正則表達(dá)式替換”選項(xiàng),在
“RegReplace”對(duì)話框中編輯相關(guān)參數(shù)后,單擊“確定”按鈕,再在返回的對(duì)話框中單擊“確定”按鈕。格式化數(shù)據(jù)(下)數(shù)據(jù)采集按照同樣的方法,對(duì)“最高氣溫”和“最低氣溫”字段進(jìn)行格式化數(shù)據(jù)操作,它們?cè)凇罢?qǐng)選擇一個(gè)操作”對(duì)話框中選擇“替換”選項(xiàng),相關(guān)參數(shù)設(shè)置如下圖所示。(a)
(b)“最高氣溫”和“最低氣溫”字段的格式化數(shù)據(jù)操作(a)最高氣溫(b)最低氣溫?cái)?shù)據(jù)采集按照同樣的方法,對(duì)“天氣”和“風(fēng)向”字段進(jìn)行格式化數(shù)據(jù)操作,它們?cè)凇罢?qǐng)選擇一個(gè)操作”對(duì)話框中選擇
“替換”選項(xiàng),相關(guān)參數(shù)設(shè)置如下圖所示。(a)(b)“天氣”和“風(fēng)向”字段的格式化數(shù)據(jù)操作(a)天氣(b)風(fēng)向數(shù)據(jù)采集按照同樣的方法,對(duì)“城市”字段進(jìn)行格式化數(shù)據(jù)操作,在“請(qǐng)選擇一個(gè)操作”對(duì)話框中選擇“去除空格”選項(xiàng),相關(guān)參數(shù)設(shè)置如右圖所示?!俺鞘小弊侄蔚母袷交瘮?shù)據(jù)操作各個(gè)字段完成格式化數(shù)據(jù)操作后,結(jié)果如下圖所示。完成格式化數(shù)據(jù)操作后的各個(gè)字段數(shù)據(jù)采集(4)單擊任務(wù)頁(yè)面右上角的“數(shù)據(jù)預(yù)覽”開關(guān)按鈕將其開啟,可查看獲取數(shù)據(jù)的形式。單擊“保存”按鈕,保存當(dāng)前數(shù)據(jù)采集任務(wù)。數(shù)據(jù)預(yù)覽數(shù)據(jù)采集3.開始采集數(shù)據(jù)單擊“開始采集”按鈕,彈出“運(yùn)行任務(wù)”對(duì)話框,單擊“啟動(dòng)本地采集”按鈕,如左圖所示,開始采集數(shù)據(jù)。耐心等待一段時(shí)間,即可完成采集,如右圖所示?!斑\(yùn)行任務(wù)”對(duì)話框采集完成數(shù)據(jù)采集4.將采集數(shù)據(jù)導(dǎo)入MySQL首先在hadoop0節(jié)點(diǎn)的MySQL中新建一個(gè)“mydb”數(shù)據(jù)庫(kù),并在該數(shù)據(jù)庫(kù)中新建一個(gè)“weather”表,然后使用八爪魚采集器將采集到的數(shù)據(jù)導(dǎo)入MySQL中的“weather”表。(1)根據(jù)詳情頁(yè)的數(shù)據(jù)分析,設(shè)計(jì)一個(gè)“weather”表,表的列為w_date、hmax、hmin、weathertype、windy和city。MySQL中的“weather”表列名數(shù)據(jù)類型描述w_datevarchar日期(主鍵)hmaxvarchar最高氣溫hminvarchar最低氣溫weathertypevarchar天氣類型windyvarchar風(fēng)cityvarchar城市數(shù)據(jù)采集在hadoop0節(jié)點(diǎn)上啟動(dòng)MySQL,然后執(zhí)行以下命令,創(chuàng)建一個(gè)名稱為“mydb”的數(shù)據(jù)庫(kù)并應(yīng)用該數(shù)據(jù)庫(kù):mysql>
CREATE
DATABASE
mydb
CHARACTER
SET
utf8;mysql>
use
mydb;接下來(lái),執(zhí)行以下命令,在“mydb”數(shù)據(jù)庫(kù)下創(chuàng)建一個(gè)名稱為“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;數(shù)據(jù)采集(2)在八爪魚采集器的采集完成對(duì)話框中,單擊“導(dǎo)出數(shù)據(jù)”按鈕,彈出
“導(dǎo)出本地?cái)?shù)據(jù)(歷史天氣—全球天氣網(wǎng))”對(duì)話框,選擇導(dǎo)出到數(shù)據(jù)庫(kù)
MySQL,然后單擊“確定”按鈕。選擇導(dǎo)出到數(shù)據(jù)庫(kù)MySQL(3)顯示設(shè)置MySQL數(shù)據(jù)庫(kù)信息界面,依次指定
MySQL服務(wù)器名稱、用戶名稱、密碼及數(shù)據(jù)庫(kù)名稱(即mydb),然后單擊“下一步”按鈕。設(shè)置MySQL數(shù)據(jù)庫(kù)信息數(shù)據(jù)采集(4)顯示數(shù)據(jù)字段映射關(guān)系設(shè)置界面,選擇
“weather”表,然后使采集數(shù)據(jù)的字段名稱與
“weather”表的列一一對(duì)應(yīng),最后單擊“導(dǎo)出”按鈕。(5)導(dǎo)出完成后,單擊“完成”按鈕。設(shè)置數(shù)據(jù)字段映射關(guān)系導(dǎo)出完成數(shù)據(jù)采集(6)用Navicat
for
MySQL工具查看MySQL中“weather”表的數(shù)據(jù)。查看MySQL中“weather”表的數(shù)據(jù)單擊“導(dǎo)入”按鈕,也可以為MySQL中的“weather”表導(dǎo)入數(shù)據(jù)(數(shù)據(jù)源可以是Excel文件、CSV文件、HTML文件等)數(shù)據(jù)采集10.2.3用Sqoop將MySQL數(shù)據(jù)導(dǎo)入Hive首先在hadoop0節(jié)點(diǎn)的Hive中新建一個(gè)“weather”表,然后使用Sqoop工具將MySQL中“weather”表的數(shù)據(jù)導(dǎo)入
Hive中的“weather”表。(1)與MySQL中的“weather”表對(duì)應(yīng),在Hive中設(shè)計(jì)一個(gè)“weather”表,表的列為w_date、hmax、hmin、weathertype、windy和city。Hive中的“weather”表列名數(shù)據(jù)類型描述w_dateDATE日期(主鍵)hmaxINT最高氣溫hminINT最低氣溫weathertypeSTRING天氣類型windySTRING風(fēng)citySTRING城市數(shù)據(jù)采集在hadoop0節(jié)點(diǎn)上啟動(dòng)Hive,然后執(zhí)行以下命令,創(chuàng)建一個(gè)名稱為“weather”的外部表(位于default數(shù)據(jù)庫(kù)):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;數(shù)據(jù)采集(2)執(zhí)行以下命令,使用Sqoop工具將MySQL中“weather”表的數(shù)據(jù)導(dǎo)入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接下來(lái),執(zhí)行以下命令,查看Hive表中的10行數(shù)據(jù)是否存在或是否出現(xiàn)格式錯(cuò)誤:hive>
SELECT
*
FROM
weather
LIMIT
10;查詢結(jié)果03數(shù)據(jù)預(yù)處理數(shù)據(jù)預(yù)處理在工程實(shí)踐中,采集到的數(shù)據(jù)往往存在缺失值、重復(fù)值、異常值等。因此,在使用數(shù)據(jù)之前,往往需要進(jìn)行數(shù)據(jù)預(yù)處理。這里將介紹常用的數(shù)據(jù)預(yù)處理方法,包括缺失值處理、數(shù)據(jù)格式化、數(shù)據(jù)去重、數(shù)據(jù)分區(qū)等數(shù)據(jù)采集10.3.1缺失值處理對(duì)于天氣數(shù)據(jù),日期可以作為一條數(shù)據(jù)的唯一標(biāo)識(shí),所以日期的數(shù)據(jù)不允許為空(NULL,即缺失值)。要查看
w_date列中是否存在NULL,可執(zhí)行以下命令:hive>
SELECT
COUNT(1)
FROM
weather
WHERE
w_date
IS
NULL;返回結(jié)果為0行(說(shuō)明不存在缺失值)。查詢“weather”表中w_date屬性值為空的行數(shù)數(shù)據(jù)采集如果w_date列中存在缺失值,應(yīng)將這些數(shù)據(jù)去除??赏ㄟ^(guò)查詢w_date列不為NULL的結(jié)果來(lái)創(chuàng)建“weather_deal1”表,以存儲(chǔ)缺失值處理后的數(shù)據(jù),即執(zhí)行以下命令:hive>
CREATE
TABLE
weather_deal1
ASSELECT
*FROM
weatherWHERE
w_date
IS
NOT
NULL;數(shù)據(jù)采集10.3.2數(shù)據(jù)格式化數(shù)據(jù)格式化就是將表中的數(shù)據(jù)處理成價(jià)值更高的數(shù)據(jù)。如city列中的某一屬性值為“北京2016年1月份天氣統(tǒng)計(jì)”,而city屬性最簡(jiǎn)練的數(shù)據(jù)形式應(yīng)為“北京”。因此,可以通過(guò)正則表達(dá)式處理city列的屬性值。首先,構(gòu)造一個(gè)用戶自定義函數(shù)“Deal”,用于格式化city,代碼如下://定義規(guī)則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);數(shù)據(jù)采集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月份天氣統(tǒng)計(jì)"));}}然后,將該項(xiàng)目打包成jar文件“Deal.jar”,并通過(guò)WinSCP軟件將其上傳到hadoop0節(jié)點(diǎn)的“/root”目錄下,并執(zhí)行以下命令,將“Deal.jar”文件注冊(cè)到Hive中(函數(shù)別名為deal):hive>
add
jar
/root/Deal.jar;hive>
CREATE
TEMPORARY
FUNCTION
deal
AS
"jqe.Deal";數(shù)據(jù)采集除了city列需要數(shù)據(jù)格式化處理外,windy列也要按空格切分成風(fēng)向(wind_direction)和風(fēng)級(jí)(wind_scale)兩列,可直接使用split()函數(shù)。最后,通過(guò)weather_deal1表處理后的結(jié)果創(chuàng)建weather_deal2表,可執(zhí)行以下命令: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;數(shù)據(jù)采集10.3.3數(shù)據(jù)去重日期既不能為空,也不能存在重復(fù)值。如果相同日期存在多條相同數(shù)據(jù),只需保留一條數(shù)據(jù)。要查看同一城市的不同w_date中是否存在重復(fù)值,可執(zhí)行以下命令:hive>SELECT
city,w_date,COUNT(1)c
FROM
weather
GROUP
BY
city,w_date
HAVING
c>1;要?jiǎng)?chuàng)建“weather_deal3”表以保存去重后的數(shù)據(jù),可執(zhí)行以下命令: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;數(shù)據(jù)采集10.3.4數(shù)據(jù)分區(qū)為了便于查詢和管理數(shù)據(jù),可以按照年和月對(duì)數(shù)據(jù)進(jìn)行分區(qū)。例如,要?jiǎng)?chuàng)建分區(qū)表“p_weather”,可執(zhí)行以下命令: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
",";數(shù)據(jù)采集然后,利用year()和month()函數(shù)獲取日期的年和月,并將去重后的數(shù)據(jù)插入到分區(qū)表中,可執(zhí)行以下命令: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數(shù)據(jù)分析數(shù)據(jù)分析10.4.1月氣溫分析1.任務(wù)描述獲取2019年北京市的全年天氣數(shù)據(jù),數(shù)據(jù)形式為“月份,日最高氣溫,日最低氣溫”,如“1,0,-9”;統(tǒng)計(jì)這些數(shù)據(jù)中每個(gè)月的最高氣溫和最低氣溫,輸出結(jié)果形式為“月份,月最高氣溫,月最低氣溫”,如
“1,11,-11”;將統(tǒng)計(jì)結(jié)果導(dǎo)入Excel并繪制出柱形圖。數(shù)據(jù)分析設(shè)計(jì)思路查詢2019年北京市的月份、日最高氣溫和日最低氣溫等天氣數(shù)據(jù),將查詢結(jié)果作為新的數(shù)據(jù)表,該表目錄下的數(shù)據(jù)作為MapReduce程序的輸入。在MapReduce中,Map的輸入為<行偏移量,行內(nèi)容>,輸出為<月份,氣溫對(duì)象>。其中,氣溫對(duì)象包含了日最
高氣溫和日最低氣溫兩個(gè)屬性。Reduce的輸入為<月份,氣溫對(duì)象>,按月份分別獲取日最高氣溫列表的最大值和
日最低氣溫列表的最小值,輸出結(jié)果為<月份,List(氣溫)>,其中列表中包含月最高氣溫和月最低氣溫。然后,對(duì)輸出結(jié)果進(jìn)行格式化,輸出形式為“月份,月最高氣溫,月最低氣溫”。將輸出文件導(dǎo)入到Excel中,繪制出柱形圖。3.編程實(shí)現(xiàn)具體操作步驟參照書中演示。數(shù)據(jù)分析要統(tǒng)計(jì)各城市每月中晴天的天數(shù),首先要在“weather”表中過(guò)濾出天氣類型為“晴”的數(shù)據(jù),并按城市、年和月進(jìn)行分組來(lái)獲取查詢結(jié)果。為了便于查詢各城市每年中晴天數(shù)最多的月份,根據(jù)之前的查詢結(jié)果,分別對(duì)城市、年和晴天數(shù)進(jìn)行降序排列。由于本數(shù)據(jù)集中僅有“北京”和“杭州”兩個(gè)城市的數(shù)據(jù),所以設(shè)置Reduce的數(shù)量為2,可執(zhí)行以下命令: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各城市每月中晴天的天數(shù)統(tǒng)計(jì)數(shù)據(jù)分析統(tǒng)計(jì)各城市每月中晴天的天數(shù)數(shù)據(jù)分析10.4.3北京市霾天氣的初步分析北京市霾天氣的數(shù)據(jù)可以從以下幾方面來(lái)初步分析。例如,統(tǒng)計(jì)每年霾天氣的天數(shù)并觀察數(shù)值變化;統(tǒng)計(jì)每月中包含霾天氣的天數(shù),以觀察霾天氣主要集中的月份;分析霾天氣與風(fēng)向和風(fēng)級(jí)的關(guān)系。統(tǒng)計(jì)北京市2016—2019年中霾天氣的天數(shù),可執(zhí)行以下命令:hive>SELECT
year,COUNT(1)FROM
p_weatherWHERE
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字化轉(zhuǎn)型對(duì)傳統(tǒng)行業(yè)的影響
- 二零二五年度劈開磚售后服務(wù)保障合同
- 2025年度鋼構(gòu)預(yù)制構(gòu)件生產(chǎn)與供貨合同協(xié)議范本
- 第5單元 走向近代【知識(shí)清單】-2023-2024學(xué)年九年級(jí)歷史上學(xué)期期中考點(diǎn)大串講(部編版)
- 2025年度個(gè)人技術(shù)服務(wù)合同(保密協(xié)議)2篇
- 黑龍江省哈爾濱市高三第二次模擬考試語(yǔ)文試卷(含答案)
- 2025年度個(gè)人抵押貸款擔(dān)保合同
- 2025年度個(gè)人房產(chǎn)交易風(fēng)險(xiǎn)評(píng)估與管理合同4篇
- 高中化學(xué)知識(shí)點(diǎn)
- 2025年度個(gè)人房產(chǎn)抵押投資合作合同協(xié)議
- 道德經(jīng)全文及注釋
- 2024中考考前地理沖刺卷及答案(含答題卡)
- 多子女贍養(yǎng)老人協(xié)議書范文
- 安踏運(yùn)動(dòng)品牌營(yíng)銷策略研究
- 彩票市場(chǎng)銷售計(jì)劃書
- 骨科抗菌藥物應(yīng)用分析報(bào)告
- 支付行業(yè)反洗錢與反恐怖融資
- 百詞斬托福詞匯excel版本
- 基礎(chǔ)設(shè)施綠色施工技術(shù)研究
- 寶鋼BQB 481-2023全工藝?yán)滠堉蓄l無(wú)取向電工鋼帶文件
- 車輛定損情況確認(rèn)書范本
評(píng)論
0/150
提交評(píng)論