第十章(Hadoop大數(shù)據(jù)處理實(shí)戰(zhàn))天氣數(shù)據(jù)分析實(shí)戰(zhàn)_第1頁
第十章(Hadoop大數(shù)據(jù)處理實(shí)戰(zhàn))天氣數(shù)據(jù)分析實(shí)戰(zhàn)_第2頁
第十章(Hadoop大數(shù)據(jù)處理實(shí)戰(zhàn))天氣數(shù)據(jù)分析實(shí)戰(zhàn)_第3頁
第十章(Hadoop大數(shù)據(jù)處理實(shí)戰(zhàn))天氣數(shù)據(jù)分析實(shí)戰(zhàn)_第4頁
第十章(Hadoop大數(shù)據(jù)處理實(shí)戰(zhàn))天氣數(shù)據(jù)分析實(shí)戰(zhàn)_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Hadoop大數(shù)據(jù)處理實(shí)戰(zhàn)第10章天氣數(shù)據(jù)分析實(shí)戰(zhàn)本章導(dǎo)讀本章將綜合運(yùn)用前面所學(xué)知識來開發(fā)一個(gè)天氣數(shù)據(jù)分析應(yīng)用案例。首先,介紹天氣數(shù)據(jù)源的分析與采集方法,包括天氣網(wǎng)的網(wǎng)頁分析、MySQL表和Hive表的設(shè)計(jì)與創(chuàng)建、數(shù)據(jù)的導(dǎo)入和導(dǎo)出等。然后,介紹數(shù)據(jù)的預(yù)處理方法,包括缺失值和重復(fù)值的處理、數(shù)據(jù)格式化和數(shù)據(jù)分區(qū)等。最后,利用MapReduce和Hive對處理后的數(shù)據(jù)進(jìn)行初步分析,得出結(jié)論。學(xué)習(xí)目標(biāo)020304掌握網(wǎng)站頁面的分析方法。掌握數(shù)據(jù)采集工具的使用方法。掌握導(dǎo)入和導(dǎo)出數(shù)據(jù)的方法。掌握數(shù)據(jù)預(yù)處理的方法。掌握數(shù)據(jù)分析的一般方法。0102案例簡介數(shù)據(jù)采集目錄CONTENTS數(shù)據(jù)預(yù)處理0304數(shù)據(jù)分析01案例分析案例分析10.1.1背景介紹天氣是指影響人類活動(dòng)的瞬間氣象特點(diǎn)的綜合狀況。它是一定區(qū)域、短時(shí)段內(nèi)的氣象變化,如溫度、濕度、氣壓、降水等。天氣與人們的生活(如衣食住行)息息相關(guān),它不僅影響著人們的出行方式,還影響著人們對

衣物的需求。天氣的數(shù)據(jù)量是十分龐大的。舉例來說,我國有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í)間角度來看,可以統(tǒng)計(jì)每個(gè)小時(shí)的天氣數(shù)據(jù),也可以簡單匯總一天的數(shù)據(jù)。隨著時(shí)間的積累,全國各地的天氣數(shù)據(jù)量就會越來越大,那么數(shù)據(jù)的存儲就成了問題。案例分析Hadoop可為海量數(shù)據(jù)提供可靠的數(shù)據(jù)存儲服務(wù),以及并行數(shù)據(jù)處理服務(wù)。因此,可以利用Hadoop技術(shù)來存儲海量天氣數(shù)據(jù),并從天氣數(shù)據(jù)中提取有價(jià)值的信息,從而為人類提供更加優(yōu)質(zhì)的服務(wù)。在交通領(lǐng)域,目前已有國際汽車公司希望利用氣象大數(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ù)分析案例的主要目的是通過網(wǎng)絡(luò)爬蟲(即數(shù)據(jù)采集器,是一種按照一定的規(guī)則自動(dòng)抓取萬維網(wǎng)信息的程序或腳本)獲取到天氣數(shù)據(jù),并將獲取到的天氣數(shù)據(jù)存儲到HDFS中,然后利用

MapReduce和Hive技術(shù)來分析天氣數(shù)據(jù),找出數(shù)據(jù)背后的規(guī)律。案例分析10.1.3案例流程天氣數(shù)據(jù)分析案例可分為6個(gè)步驟分析天氣網(wǎng)站分析數(shù)據(jù)來源的網(wǎng)頁,以提取可采集的數(shù)據(jù);獲取歷史數(shù)據(jù)構(gòu)建數(shù)據(jù)爬蟲規(guī)則以批量獲取數(shù)據(jù);導(dǎo)出數(shù)據(jù)將獲取到的數(shù)據(jù)導(dǎo)入關(guān)系型數(shù)據(jù)庫(如MySQL);遷移數(shù)據(jù)將關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入Hadoop集群(如Hive表對應(yīng)的HDFS目錄);數(shù)據(jù)預(yù)處理與數(shù)據(jù)計(jì)算利用Hive或MapReduce對天氣數(shù)據(jù)進(jìn)行離線數(shù)據(jù)處理;數(shù)據(jù)可視化將數(shù)據(jù)處理結(jié)果以可視化形式(如Excel、Python、R等)展現(xiàn)出來。02數(shù)據(jù)采集數(shù)據(jù)采集10.2.1分析頁面1.瀏覽天氣網(wǎng)站(1)打開天氣網(wǎng)首頁(https://),在導(dǎo)航欄中選擇“天氣”→“歷史天氣”選項(xiàng)。天氣網(wǎng)首頁數(shù)據(jù)采集(2)在打開的“歷史天氣查詢”頁面中,選擇一個(gè)要查詢的城市(可直接單擊城市名稱超鏈接,也可通過右上角的搜索框查找相應(yīng)城市),此處單擊“北京”超鏈接。“歷史天氣查詢”頁面數(shù)據(jù)采集(3)在打開的“北京歷史天氣”頁面中,找到“北京歷史天氣詳情”欄,然后單擊要查看的月份超鏈接,此處單擊“2019年01月天氣”超鏈接?!氨本v史天氣詳情”欄數(shù)據(jù)采集(4)在打開的頁面中會顯示北京2019年01月份的天氣詳情。北京2019年01月份天氣詳情數(shù)據(jù)采集2.分析數(shù)據(jù)頁面由上圖可以觀察到多種與天氣相關(guān)的有價(jià)值的數(shù)據(jù),如日期、最高氣溫、最低氣溫、天氣和風(fēng)向等,并且可顯示當(dāng)月的全部天氣數(shù)據(jù)。另外,可以通過縱向?qū)Ρ群蜋M向?qū)Ρ鹊姆绞絹矸治鰵v史天氣靜態(tài)網(wǎng)頁的網(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)頁名稱不同,如201901.html和201902.html是以年和月作為靜態(tài)網(wǎng)頁的名稱,所以北京市的歷史天氣數(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)的歷史天氣頁面的地址為“/城市/年月.html”。數(shù)據(jù)采集10.2.2采集數(shù)據(jù)1.安裝數(shù)據(jù)采集器首先通過頁面https:///download/windows下載八爪魚數(shù)據(jù)采集器安裝包(如“八爪魚采集器8.0.6.zip”),將安裝包解壓后,雙擊其中的“八爪魚采集器Setup

8.0.6.exe”文件進(jìn)行安裝。安裝完成后,啟動(dòng)八爪魚采集器。然后根據(jù)提示注冊一個(gè)賬號,并用其進(jìn)行登錄。八爪魚采集器登錄界面數(shù)據(jù)采集2.新建數(shù)據(jù)采集任務(wù)(1)單擊左側(cè)列表框中的“新建”按鈕,然后在彈出的列表中選擇“自定義任務(wù)”選項(xiàng)。新建自定義任務(wù)數(shù)據(jù)采集此時(shí)右側(cè)區(qū)域會顯示“任務(wù):新建任務(wù)”界面,在“采集網(wǎng)址”一欄選擇“批量生成”選項(xiàng)并編輯網(wǎng)址格式。編輯完成后,單擊“保存設(shè)置”按鈕。新建天氣數(shù)據(jù)采集任務(wù)數(shù)據(jù)采集(2)此時(shí)會彈出提示框“已完成網(wǎng)址生成,現(xiàn)在可以開始編輯任務(wù)了”,單擊“確定”按鈕,顯示任務(wù)頁面。首先單擊頁面中的“查看更多”按鈕(顯示本月全部天氣記錄),然后單擊“智能提示”對話框中的“點(diǎn)擊該元素”超鏈接。讓頁面顯示本月全部天氣記錄數(shù)據(jù)采集單擊“日期”列下方的第1個(gè)單元格“2016-01-01星期五”,再依次單擊“智能提示”對話框中的“選中全部”超鏈接、“采集以下元素文本”超鏈接。設(shè)置采集字段1數(shù)據(jù)采集重復(fù)同樣的操作,通過依次單擊右側(cè)4個(gè)單元格,采集右側(cè)4列(即最高氣溫、最低氣溫、天氣和風(fēng)向)對應(yīng)的數(shù)據(jù),以設(shè)置采集字段2~5。最后,先單擊“北京2016年1月份天氣統(tǒng)計(jì)”區(qū)域,再單擊“智能提示”對話框中的“采集該元素的文本”超鏈接,以設(shè)置采集字段6。設(shè)置采集字段6數(shù)據(jù)采集(3)單擊任務(wù)頁面右上角的“流程”開關(guān)按鈕將其開啟。首先,將任務(wù)名稱修改為“歷史天氣—全球天氣網(wǎng)”。修改任務(wù)名稱數(shù)據(jù)采集然后,修改各個(gè)采集字段的名稱。修改字段名稱數(shù)據(jù)采集彈出的對話框接下來,需要格式化各個(gè)字段的數(shù)據(jù)。單擊“日期”字段右側(cè)的“自定義數(shù)據(jù)字段”按鈕,在中選擇“格式化數(shù)據(jù)”選項(xiàng),再在下一個(gè)對話框中單擊“添加步驟”按鈕。格式化數(shù)據(jù)(上)數(shù)據(jù)采集在彈出的“請選擇一個(gè)操作”對話框中選擇“正則表達(dá)式替換”選項(xiàng),在

“RegReplace”對話框中編輯相關(guān)參數(shù)后,單擊“確定”按鈕,再在返回的對話框中單擊“確定”按鈕。格式化數(shù)據(jù)(下)數(shù)據(jù)采集按照同樣的方法,對“最高氣溫”和“最低氣溫”字段進(jìn)行格式化數(shù)據(jù)操作,它們在“請選擇一個(gè)操作”對話框中選擇“替換”選項(xiàng),相關(guān)參數(shù)設(shè)置如下圖所示。(a)

(b)“最高氣溫”和“最低氣溫”字段的格式化數(shù)據(jù)操作(a)最高氣溫(b)最低氣溫?cái)?shù)據(jù)采集按照同樣的方法,對“天氣”和“風(fēng)向”字段進(jìn)行格式化數(shù)據(jù)操作,它們在“請選擇一個(gè)操作”對話框中選擇

“替換”選項(xiàng),相關(guān)參數(shù)設(shè)置如下圖所示。(a)(b)“天氣”和“風(fēng)向”字段的格式化數(shù)據(jù)操作(a)天氣(b)風(fēng)向數(shù)據(jù)采集按照同樣的方法,對“城市”字段進(jìn)行格式化數(shù)據(jù)操作,在“請選擇一個(gè)操作”對話框中選擇“去除空格”選項(xiàng),相關(guān)參數(shù)設(shè)置如右圖所示?!俺鞘小弊侄蔚母袷交瘮?shù)據(jù)操作各個(gè)字段完成格式化數(shù)據(jù)操作后,結(jié)果如下圖所示。完成格式化數(shù)據(jù)操作后的各個(gè)字段數(shù)據(jù)采集(4)單擊任務(wù)頁面右上角的“數(shù)據(jù)預(yù)覽”開關(guān)按鈕將其開啟,可查看獲取數(shù)據(jù)的形式。單擊“保存”按鈕,保存當(dāng)前數(shù)據(jù)采集任務(wù)。數(shù)據(jù)預(yù)覽數(shù)據(jù)采集3.開始采集數(shù)據(jù)單擊“開始采集”按鈕,彈出“運(yùn)行任務(wù)”對話框,單擊“啟動(dòng)本地采集”按鈕,如左圖所示,開始采集數(shù)據(jù)。耐心等待一段時(shí)間,即可完成采集,如右圖所示。“運(yùn)行任務(wù)”對話框采集完成數(shù)據(jù)采集4.將采集數(shù)據(jù)導(dǎo)入MySQL首先在hadoop0節(jié)點(diǎn)的MySQL中新建一個(gè)“mydb”數(shù)據(jù)庫,并在該數(shù)據(jù)庫中新建一個(gè)“weather”表,然后使用八爪魚采集器將采集到的數(shù)據(jù)導(dǎo)入MySQL中的“weather”表。(1)根據(jù)詳情頁的數(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ù)庫并應(yīng)用該數(shù)據(jù)庫:mysql>

CREATE

DATABASE

mydb

CHARACTER

SET

utf8;mysql>

use

mydb;接下來,執(zhí)行以下命令,在“mydb”數(shù)據(jù)庫下創(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)在八爪魚采集器的采集完成對話框中,單擊“導(dǎo)出數(shù)據(jù)”按鈕,彈出

“導(dǎo)出本地?cái)?shù)據(jù)(歷史天氣—全球天氣網(wǎng))”對話框,選擇導(dǎo)出到數(shù)據(jù)庫

MySQL,然后單擊“確定”按鈕。選擇導(dǎo)出到數(shù)據(jù)庫MySQL(3)顯示設(shè)置MySQL數(shù)據(jù)庫信息界面,依次指定

MySQL服務(wù)器名稱、用戶名稱、密碼及數(shù)據(jù)庫名稱(即mydb),然后單擊“下一步”按鈕。設(shè)置MySQL數(shù)據(jù)庫信息數(shù)據(jù)采集(4)顯示數(shù)據(jù)字段映射關(guān)系設(shè)置界面,選擇

“weather”表,然后使采集數(shù)據(jù)的字段名稱與

“weather”表的列一一對應(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”表對應(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ù)庫):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接下來,執(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缺失值處理對于天氣數(shù)據(jù),日期可以作為一條數(shù)據(jù)的唯一標(biāo)識,所以日期的數(shù)據(jù)不允許為空(NULL,即缺失值)。要查看

w_date列中是否存在NULL,可執(zhí)行以下命令:hive>

SELECT

COUNT(1)

FROM

weather

WHERE

w_date

IS

NULL;返回結(jié)果為0行(說明不存在缺失值)。查詢“weather”表中w_date屬性值為空的行數(shù)數(shù)據(jù)采集如果w_date列中存在缺失值,應(yīng)將這些數(shù)據(jù)去除??赏ㄟ^查詢w_date列不為NULL的結(jié)果來創(chuàng)建“weather_deal1”表,以存儲缺失值處理后的數(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屬性最簡練的數(shù)據(jù)形式應(yīng)為“北京”。因此,可以通過正則表達(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”,并通過WinSCP軟件將其上傳到hadoop0節(jié)點(diǎn)的“/root”目錄下,并執(zhí)行以下命令,將“Deal.jar”文件注冊到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)級(wind_scale)兩列,可直接使用split()函數(shù)。最后,通過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ù),可以按照年和月對數(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)容>,輸出為<月份,氣溫對象>。其中,氣溫對象包含了日最

高氣溫和日最低氣溫兩個(gè)屬性。Reduce的輸入為<月份,氣溫對象>,按月份分別獲取日最高氣溫列表的最大值和

日最低氣溫列表的最小值,輸出結(jié)果為<月份,List(氣溫)>,其中列表中包含月最高氣溫和月最低氣溫。然后,對輸出結(jié)果進(jìn)行格式化,輸出形式為“月份,月最高氣溫,月最低氣溫”。將輸出文件導(dǎo)入到Excel中,繪制出柱形圖。3.編程實(shí)現(xiàn)具體操作步驟參照書中演示。數(shù)據(jù)分析要統(tǒng)計(jì)各城市每月中晴天的天數(shù),首先要在“weather”表中過濾出天氣類型為“晴”的數(shù)據(jù),并按城市、年和月進(jìn)行分組來獲取查詢結(jié)果。為了便于查詢各城市每年中晴天數(shù)最多的月份,根據(jù)之前的查詢結(jié)果,分別對城市、年和晴天數(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ù)可以從以下幾方面來初步分析。例如,統(tǒng)計(jì)每年霾天氣的天數(shù)并觀察數(shù)值變化;統(tǒng)計(jì)每月中包含霾天氣的天數(shù),以觀察霾天氣主要集中的月份;分析霾天氣與風(fēng)向和風(fēng)級的關(guān)系。統(tǒng)計(jì)北京市2016—2019年中霾天氣的天數(shù),可執(zhí)行以下命令:hive>SELECT

year,COUNT(1)FROM

p_weatherWHERE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論