大數(shù)據(jù)分析及應(yīng)用項(xiàng)目教程(Spark SQL)(微課版) 課件 許慧 第5、6章 電商大數(shù)據(jù)分析與探索、Zepplin數(shù)據(jù)可視化_第1頁(yè)
大數(shù)據(jù)分析及應(yīng)用項(xiàng)目教程(Spark SQL)(微課版) 課件 許慧 第5、6章 電商大數(shù)據(jù)分析與探索、Zepplin數(shù)據(jù)可視化_第2頁(yè)
大數(shù)據(jù)分析及應(yīng)用項(xiàng)目教程(Spark SQL)(微課版) 課件 許慧 第5、6章 電商大數(shù)據(jù)分析與探索、Zepplin數(shù)據(jù)可視化_第3頁(yè)
大數(shù)據(jù)分析及應(yīng)用項(xiàng)目教程(Spark SQL)(微課版) 課件 許慧 第5、6章 電商大數(shù)據(jù)分析與探索、Zepplin數(shù)據(jù)可視化_第4頁(yè)
大數(shù)據(jù)分析及應(yīng)用項(xiàng)目教程(Spark SQL)(微課版) 課件 許慧 第5、6章 電商大數(shù)據(jù)分析與探索、Zepplin數(shù)據(jù)可視化_第5頁(yè)
已閱讀5頁(yè),還剩84頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章電商大數(shù)據(jù)分析與探索女裝電子商務(wù)評(píng)論情況分析第一部分?jǐn)?shù)據(jù)準(zhǔn)備數(shù)據(jù)轉(zhuǎn)換數(shù)據(jù)分析數(shù)據(jù)輸出數(shù)據(jù)清洗情境導(dǎo)入

網(wǎng)購(gòu)已經(jīng)成為人們生活中不可或缺的一件事情,如何經(jīng)營(yíng)好一家線上商店是很多商家關(guān)注的問(wèn)題。對(duì)于線上商店,客戶(hù)對(duì)商品的評(píng)論情況對(duì)商品的銷(xiāo)量、商店的經(jīng)營(yíng)發(fā)展起到了重要的作用?,F(xiàn)有某女裝線上商店的一份圍繞客戶(hù)評(píng)論的女裝電子商務(wù)數(shù)據(jù)集Clothing-Reviews.csv。現(xiàn)在商家希望能幫助他們對(duì)此份數(shù)據(jù)進(jìn)行分析,獲得一些建設(shè)性意見(jiàn),幫助商店更好的發(fā)展。字段含義order_id訂單編號(hào)clothing_id服裝編號(hào)age年齡review_text 評(píng)論rating評(píng)級(jí)recommended_IND是否推薦positive_feedback_count積極反饋計(jì)數(shù)class_name服裝分類(lèi)學(xué)習(xí)目標(biāo)和要求1、掌握從不同數(shù)據(jù)源創(chuàng)建DataFrames的方法。2、掌握操作DataFrame進(jìn)行數(shù)據(jù)清洗的基本方法。3、掌握操作DataFrame進(jìn)行數(shù)據(jù)轉(zhuǎn)換的基本方法。4、掌握使用SparkSQL語(yǔ)句進(jìn)行數(shù)據(jù)分析的方法。5、掌握持久存儲(chǔ)數(shù)據(jù)的方法。數(shù)據(jù)準(zhǔn)備

在實(shí)際業(yè)務(wù)中,數(shù)據(jù)的來(lái)源多種多樣。SparkSQL在數(shù)據(jù)兼容方面,不僅可以直接處理RDD,也可以處理Parquet文件或者JSON文件,更可以處理外部數(shù)據(jù)庫(kù)中的數(shù)據(jù)。

在Spark中,DataFrame是一種以RDD為基礎(chǔ)的分布式數(shù)據(jù)集,類(lèi)似于傳統(tǒng)數(shù)據(jù)庫(kù)中的二維表格,是SparkSQL最核心的編程抽象。DataFrame與RDD的主要區(qū)別在于,前者帶有schema元信息,即DataFrame所表示的二維表數(shù)據(jù)集的每一列都帶有名稱(chēng)和類(lèi)型。這使得SparkSQL得以洞察更多的結(jié)構(gòu)信息,從而可以對(duì)藏于DataFrame背后的數(shù)據(jù)源以及作用于DataFrame之上的變換進(jìn)行針對(duì)性的優(yōu)化,最終達(dá)到大幅提升運(yùn)行效率的目標(biāo)。數(shù)據(jù)準(zhǔn)備

使用Spark庫(kù)可以將不同數(shù)據(jù)來(lái)源的數(shù)據(jù)轉(zhuǎn)換為DataFrame,并對(duì)數(shù)據(jù)結(jié)果進(jìn)行展示。創(chuàng)建DataFrame的三種方法:1、使用toDF函數(shù)創(chuàng)建DataFrame(1)本地seq+toDF創(chuàng)建DataFrame。

(2)通過(guò)caseclass+toDF創(chuàng)建DataFrame數(shù)據(jù)準(zhǔn)備2、使用createDataFrame函數(shù)創(chuàng)建DataFrame數(shù)據(jù)準(zhǔn)備3、從外部數(shù)據(jù)創(chuàng)建DataFrame

(1)使用parquet文件創(chuàng)建valdf=sqlContext.read.parquet("/Chapter5/goods.parquet")

(2)使用json文件創(chuàng)建valdf=spark.read.json("/Chapter5/goods.json")

(3)使用CSV(Comma-SeparatedValues)文件創(chuàng)建1)讀取CSV文件,使用類(lèi)型推斷創(chuàng)建DataFrame2)讀取CSV文件,自定義schema創(chuàng)建DataFrame。數(shù)據(jù)準(zhǔn)備4、讀取“女裝電子商務(wù)評(píng)論”數(shù)據(jù)集(1)啟動(dòng)Hadoop集群和Spark集群(2)將“Clothing-Reviews.csv”女裝電子商務(wù)評(píng)論數(shù)據(jù)集上傳到HDFS文件系統(tǒng)的/Chapter5/目錄下。(3)讀取CSV文件,使用自定義schema方式轉(zhuǎn)換為DataFrame。數(shù)據(jù)清洗

數(shù)據(jù)清洗是對(duì)數(shù)據(jù)進(jìn)行重新審查和校驗(yàn)的過(guò)程,目的在于刪除重復(fù)信息、糾正存在的錯(cuò)誤,并提供數(shù)據(jù)一致性。在Clothing-Reviews.csv數(shù)據(jù)集中,存在一些重復(fù)數(shù)據(jù),也有部分缺失,需要我們對(duì)其進(jìn)行數(shù)據(jù)清洗。1、drop(cols)

按照列名cols刪除DataFrame中的列,返回新的DataFrame。此方法可以刪除數(shù)據(jù)表中無(wú)用的或者不想要的數(shù)據(jù)列。刪除“publisher”列。數(shù)據(jù)清洗2、dropDuplicates(subset=None)

此方法用于刪除DataFrame中的重復(fù)行,subset用于指定刪除重復(fù)行的時(shí)候考慮哪幾列。刪除重復(fù)的行:刪除author列重復(fù)的行:數(shù)據(jù)清洗3、na.drop

此方法用于刪除DataFrame中的null空數(shù)據(jù),加入“any”和“all”參數(shù)可以指定刪除條件,加入數(shù)字參數(shù)指定有多少個(gè)空值進(jìn)行刪除,加入字段名刪除指定字段中的空值。對(duì)有任意一個(gè)為缺失值的行進(jìn)行刪除:對(duì)全部為缺失值的行進(jìn)行刪除:對(duì)有3個(gè)缺失值的數(shù)據(jù)行進(jìn)行刪除:對(duì)有兩個(gè)缺失值以上的數(shù)據(jù)行進(jìn)行刪除:數(shù)據(jù)清洗4、na.fill()

此方法用于將DataFrame中所有缺失值填充為一個(gè)給定的字符串或數(shù)值??梢詾樗腥笔е抵付ㄗ址驍?shù)值,也可以為指定列指定不同字符串或數(shù)值。將表中所有的null空數(shù)據(jù)指定為“不明”:數(shù)據(jù)清洗對(duì)不同的列中缺失值填充不同的字符串:5、對(duì)“Clothing-Reviews.csv”女裝電子商務(wù)評(píng)論數(shù)據(jù)集進(jìn)行數(shù)據(jù)清洗,刪除重復(fù)的數(shù)據(jù),對(duì)有空缺數(shù)據(jù)的行進(jìn)行刪除。數(shù)據(jù)轉(zhuǎn)換

數(shù)據(jù)轉(zhuǎn)換是將數(shù)據(jù)從一種格式或結(jié)構(gòu)轉(zhuǎn)換為另一種格式或結(jié)構(gòu)的過(guò)程。數(shù)據(jù)轉(zhuǎn)換對(duì)于數(shù)據(jù)集成和數(shù)據(jù)管理等活動(dòng)至關(guān)重要。數(shù)據(jù)轉(zhuǎn)換可以包括一系列活動(dòng):可以轉(zhuǎn)換數(shù)據(jù)類(lèi)型,豐富數(shù)據(jù)或執(zhí)行聚合,具體取決于項(xiàng)目的需要。1、withColumn(colName,col)

此方法用于為數(shù)據(jù)表添加新列,返回一個(gè)新的DataFrame增加colNAme列,如果原來(lái)本身就有colName的列,就進(jìn)行替換。數(shù)據(jù)轉(zhuǎn)換2、withColumnRename(existing,new)

此方法用于對(duì)已經(jīng)存在的列名進(jìn)行重命名。existing為原來(lái)的名字,new為新的列名,若名稱(chēng)不存在則這個(gè)操作不做任何事情。3、定義UDF,將數(shù)據(jù)表中的兩列合并成一列。UDF是指用戶(hù)定義函數(shù),用于擴(kuò)展系統(tǒng)的內(nèi)置功能。我們可以在SparkSQL中自定義實(shí)際需要的UDF來(lái)處理數(shù)據(jù)。//創(chuàng)建一個(gè)udf來(lái)連接兩個(gè)列值valconnect=udf((name:String,author:String)=>{name+"-"+author})

//應(yīng)用該udf來(lái)創(chuàng)建合并的列,并添加為新的列valconnectdf=books.withColumn("bookname-author",connect($"name",$"author"))數(shù)據(jù)轉(zhuǎn)換4、定義UDF,對(duì)表格中的列添加字符或者數(shù)字。

定義一個(gè)udf,為price列的值增加10,此處需要利用toDouble將原來(lái)字符串類(lèi)型的price值轉(zhuǎn)換為double類(lèi)型數(shù)值:valaddconst=udf((price:String)=>{if(price==null)0elseprice.toDouble+10})

當(dāng)對(duì)表中已經(jīng)存在的列的值追加新的列時(shí),如果新列與舊列同名,則會(huì)覆蓋舊列:數(shù)據(jù)轉(zhuǎn)換5、na.replace

此方法用于對(duì)現(xiàn)有的字符或者數(shù)字刪除或替換字符或者數(shù)字。如果在replace中列名參數(shù)是“*”,那么將會(huì)對(duì)所有的列進(jìn)行相應(yīng)的替換。6、對(duì)“Clothing-Reviews.csv”女裝電子商務(wù)評(píng)論數(shù)據(jù)集進(jìn)行數(shù)據(jù)轉(zhuǎn)換,將recommended_IND(是否推薦)列中的1替換為推薦,0替換為不推薦。數(shù)據(jù)分析

使用SQL語(yǔ)句對(duì)數(shù)據(jù)進(jìn)行探索分析是大多數(shù)軟件開(kāi)發(fā)和維護(hù)人員比較習(xí)慣的方式。SparkSQL支持直接應(yīng)用標(biāo)準(zhǔn)SQL語(yǔ)句進(jìn)行查詢(xún)。在進(jìn)行SQL操作之前,需要新建注冊(cè)臨時(shí)表,然后才能進(jìn)行SparkSQL查詢(xún)。1、注冊(cè)臨時(shí)表的方法:(1)createGlobalTempView(name)

此方法用于為DataFrame創(chuàng)建一個(gè)全局的臨時(shí)表。其生命周期和啟動(dòng)的應(yīng)用的周期一致,既啟動(dòng)的spark應(yīng)用存在則這個(gè)臨時(shí)的表就一直能訪問(wèn),直到退出應(yīng)用為止。name為新視圖的名稱(chēng),名稱(chēng)不能與已存在的一樣,否則會(huì)報(bào)錯(cuò)。數(shù)據(jù)分析(2)createOrReplaceGlobalTempView(name)

此方法用于創(chuàng)建或替換視圖。當(dāng)視圖名稱(chēng)name已經(jīng)存在,則進(jìn)行替換,若其不存在,則進(jìn)行創(chuàng)建。(3)createTempView(name)

此方法用于創(chuàng)建臨時(shí)視圖。name為新視圖的名稱(chēng),名稱(chēng)不能與已存在的一樣,否則會(huì)報(bào)錯(cuò)。(4)createOrReplaceTempView(name)此方法用于為DataFrame創(chuàng)建本地的臨時(shí)視圖,其生命周期只限于當(dāng)前的SparkSession。當(dāng)視圖名稱(chēng)name已經(jīng)存在,則進(jìn)行替換,若其不存在,則進(jìn)行創(chuàng)建。臨時(shí)表創(chuàng)建完成后,就可以執(zhí)行SQL語(yǔ)句,對(duì)表進(jìn)行查詢(xún)。數(shù)據(jù)分析2、案例分析:以本章數(shù)據(jù)集中的books.csv為例,進(jìn)行操作理解。(1)自定義schema,讀取books.csv文件,刪除有空缺數(shù)據(jù)的行及重復(fù)數(shù)據(jù)。(2)注冊(cè)臨時(shí)表:book2.createOrReplaceTempView("btemp")數(shù)據(jù)分析(3)進(jìn)行簡(jiǎn)單的SparkSQL查詢(xún)?cè)谂R時(shí)表中執(zhí)行SQL,查詢(xún)book_price價(jià)格小于30的書(shū)。數(shù)據(jù)分析3、對(duì)Clothing-Reviews.csv數(shù)據(jù)進(jìn)行SQL探索分析。(1)查看40歲以下,不同年齡段的客戶(hù)人數(shù)。

將統(tǒng)計(jì)的年齡數(shù)量count(age)重新命名為total_nu進(jìn)行輸出。并對(duì)統(tǒng)計(jì)的結(jié)果根據(jù)年齡進(jìn)行升序排序。數(shù)據(jù)分析(2)統(tǒng)計(jì)recommended_IND為“不推薦”的訂單的rating評(píng)分分布。選擇rating列進(jìn)行count(1)計(jì)數(shù),并限定條件為recommended_IND='不推薦',最后根據(jù)rating進(jìn)行g(shù)roup分類(lèi)。(3)為進(jìn)一步了解用戶(hù)“不推薦”的原因,可以查看用戶(hù)具體評(píng)論。查看評(píng)分小于等于3且為“不推薦”的訂單的具體評(píng)論。選擇clothing_id,rating,review_text三列進(jìn)行顯示,并限定條件為rating<=3并且recommended_IND='不推薦'。數(shù)據(jù)分析(4)查詢(xún)了解,不推薦的這些訂單,分別屬于哪些服裝分類(lèi),各種服裝類(lèi)的不推薦數(shù)量情況是如何的。

選擇服裝分類(lèi)class_name進(jìn)行count()統(tǒng)計(jì)并命名為classnum,限定條件設(shè)置為recommended_IND='不推薦',最后根據(jù)class_name分類(lèi)。(5)統(tǒng)計(jì)分析不同評(píng)分等級(jí)的服裝編號(hào)clothing_id情況。獲得不同服裝編號(hào)clothing_id的五星好評(píng)數(shù)量,并且降序排序。

選擇clothing_id進(jìn)行count()統(tǒng)計(jì),并重命名為five_stars_num輸出。限定條件為五星好評(píng)rating=5,以clothing_id進(jìn)行分類(lèi),最后根據(jù)五星好評(píng)數(shù)量five_stars_num進(jìn)行降序排序。數(shù)據(jù)分析(6)使用SparkSQL的內(nèi)置函數(shù)進(jìn)行相關(guān)性等分析。

在數(shù)據(jù)分析中,相關(guān)性分析可以用于分析兩個(gè)變量之間的相關(guān)方向和相關(guān)強(qiáng)度,從而實(shí)現(xiàn)對(duì)其中一個(gè)數(shù)據(jù)進(jìn)行改變來(lái)影響另一個(gè)數(shù)據(jù)的變化。可以利用協(xié)方差函數(shù)cov()判斷兩個(gè)變量之間的相關(guān)方向。可以利用相關(guān)性函數(shù)corr()計(jì)算兩個(gè)變量之間的相關(guān)性。//協(xié)方差給出了這兩個(gè)變量之間的相關(guān)方向valcov=reviews3.stat.cov("rating","positive_feedback_count")//corr()給出了這兩個(gè)變量之間關(guān)系強(qiáng)度的大小valcorr=reviews3.stat.corr("rating","positive_feedback_count")1)分析“rating”評(píng)分字段和“positive_feedback_count”積極反饋數(shù)量字段之間的相關(guān)性。數(shù)據(jù)分析2)freqItems()提取數(shù)據(jù)列中最常出現(xiàn)的項(xiàng)。

在數(shù)據(jù)分析中,根據(jù)業(yè)務(wù)需求,可能需要知曉數(shù)據(jù)列中最常出現(xiàn)的元素,從而對(duì)決策提供依據(jù)??梢岳胒reqItems()函數(shù)提取數(shù)據(jù)列中最常出現(xiàn)的項(xiàng),freqItems()函數(shù)中第一個(gè)參數(shù)是指定的分析列,第二個(gè)參數(shù)是指定的支持級(jí)別。

選擇服裝分類(lèi)class_name作為分析列,在DataFramereviews3中,找到服裝分類(lèi)出現(xiàn)概率大于40%的類(lèi)別,即支持級(jí)別為0.4。數(shù)據(jù)分析3)approxQuantile()計(jì)算DataFrame中數(shù)字列的近似分位數(shù)。

計(jì)算分位數(shù)的意義是表示在這個(gè)樣本集中,從小至大排列之后,小于某值的樣本子集占總樣本集的比例。

對(duì)age列計(jì)算近似分位數(shù),指定的分位數(shù)概率為0.25、0.5和0.75(注意:0是最小值,1是最大值,0.5是中值median)。4)crosstab()探索年齡age和評(píng)分rating等級(jí)間是否有相關(guān)性。crosstab()可以對(duì)兩個(gè)變量中的每個(gè)數(shù)據(jù)進(jìn)行相關(guān)性計(jì)算,從而觀察這兩個(gè)變量之間的相互關(guān)系程度與趨勢(shì)。數(shù)據(jù)輸出

數(shù)據(jù)分析后的結(jié)果最終需要保存輸出,以供決策者進(jìn)行查看引用。DataFrame提供了很多種輸出操作方法,可以存儲(chǔ)到數(shù)據(jù)庫(kù),也可以保存成文件。保存到文件里有兩種方法,以將數(shù)據(jù)寫(xiě)入到HDFS中為例進(jìn)行詳細(xì)解釋。方法一:利用save()函數(shù)保存數(shù)據(jù)。//調(diào)用save()函數(shù),保存DataFrame數(shù)據(jù)到/Chapter5/reviews目錄中。selectData.select("*").write.format("csv").save("/Chapter5/reviews")write.format()支持輸出的格式有JSON、parquet、JDBC、orc、csv、text等文件格式,save()定義保存的位置。數(shù)據(jù)輸出方法二:通過(guò)df.rdd.saveAsTextFile("file:///")轉(zhuǎn)化成rdd再保存。此方法可以將數(shù)據(jù)存儲(chǔ)為txt格式。將數(shù)據(jù)保存輸出到HDFS文件系統(tǒng)的/Chapter5目錄下,并命名為reviews_two.txt在線銷(xiāo)售訂單數(shù)據(jù)分析第二部分?jǐn)?shù)據(jù)查詢(xún)操作數(shù)據(jù)分析探索情境導(dǎo)入

隨著電商直播與購(gòu)物的盛行,大型零售商正在積極尋找增加利潤(rùn)的方法。銷(xiāo)售分析是大型零售商通過(guò)了解客戶(hù)的購(gòu)買(mǎi)行為和模式來(lái)增加銷(xiāo)售額的關(guān)鍵技術(shù)之一。查找客戶(hù)購(gòu)買(mǎi)行為數(shù)據(jù)集,探索數(shù)據(jù)集上下文中組合在一起的項(xiàng)目之間的關(guān)系?,F(xiàn)有兩份在線銷(xiāo)售數(shù)據(jù)集orders.csv和order-details.csv,是關(guān)于不同地區(qū)、多種商品和電子產(chǎn)品等的銷(xiāo)售情況。現(xiàn)在希望通過(guò)數(shù)據(jù)分析了解以下情況:1、此數(shù)據(jù)集中每個(gè)客戶(hù)的下單數(shù)量是多少?2、每個(gè)城市的訂單有多少?3、每個(gè)客戶(hù)的消費(fèi)總額是多少?4、客戶(hù)的平均訂單消費(fèi)額是多少?學(xué)習(xí)目標(biāo)和要求1、靈活使用DataFrame數(shù)據(jù)操作的各種方法進(jìn)行數(shù)據(jù)查詢(xún)。2、會(huì)使用聚合、連接等操作對(duì)DataFrame數(shù)據(jù)進(jìn)行轉(zhuǎn)換。3、能使用聚合函數(shù)對(duì)DataFrame數(shù)據(jù)進(jìn)行分析。數(shù)據(jù)查詢(xún)操作1、查看數(shù)據(jù)(1)show

該方法主要用于測(cè)試,查看輸入的數(shù)據(jù)、獲得的結(jié)果是否正確。該方法能夠以表格的形式展示DataFrame中的數(shù)據(jù)。1)show()沒(méi)有參數(shù)的show方法默認(rèn)最多能夠顯示20條數(shù)據(jù)。2)show(numRows:Int)此方法可以指定要顯示的行數(shù)。數(shù)據(jù)查詢(xún)操作(2)collect()collect方法類(lèi)似與SparkRDD的collect方法。與show方法不同的是,collect方法可以獲取DataFrame中的所有數(shù)據(jù),并返回一個(gè)Array對(duì)象。數(shù)據(jù)查詢(xún)操作2、過(guò)濾查詢(xún)1)where

在SQL語(yǔ)法中,可以通過(guò)where條件語(yǔ)句對(duì)數(shù)據(jù)進(jìn)行過(guò)濾。在SparkSQL中,同樣可以像SQL一樣使用where(conditionExpr:String)條件語(yǔ)句來(lái)對(duì)數(shù)據(jù)進(jìn)行過(guò)濾??梢灾付l件參數(shù)conditionExpr來(lái)進(jìn)行查詢(xún),參數(shù)中可以使用and或or。數(shù)據(jù)查詢(xún)操作2)filterfilter方法和where方法類(lèi)似,可以篩選出符合條件的數(shù)據(jù)。數(shù)據(jù)查詢(xún)操作3、指定列查詢(xún)1)select

在SparkSQL中可以通過(guò)select方法來(lái)查詢(xún)指定字段,類(lèi)似于SQL中的select方法。查詢(xún)emp中,字段名稱(chēng)為name和salary的值。數(shù)據(jù)查詢(xún)操作2)selectExpr

這個(gè)方法是select方法的一個(gè)變體,可以接受一個(gè)SQL表達(dá)式,或?qū)δ承┳侄巫鲆恍┨厥馓幚?。?shù)據(jù)查詢(xún)操作4、排序操作1)orderBy

此方法能夠使數(shù)據(jù)按照指定的字段排序,默認(rèn)升序排序。如果需要降序排序,可以使用desc(“字段名稱(chēng)”)或者$“字段名”.desc進(jìn)行處理。對(duì)emp中的salary薪水列進(jìn)行降序排序:數(shù)據(jù)查詢(xún)操作2)sortsort方法與orderBy方法一樣,也是對(duì)指定字段進(jìn)行排序。對(duì)emp中的salary薪水列進(jìn)行升序排序。數(shù)據(jù)查詢(xún)操作5、分組聚合1)groupBy分組

此方法可以根據(jù)字段進(jìn)行分組操作。調(diào)用方式可以傳入String類(lèi)型的字段名,也可以是Column類(lèi)型的對(duì)象。

分別以傳入String類(lèi)型的字段名和Column類(lèi)型的對(duì)象,對(duì)emp中的position職位進(jìn)行分組。groupBy方法返回的是RelationalGroupedDataset對(duì)象,該對(duì)象提供了max()、min()、mean()、sum()、count()等相關(guān)的聚合方法,可以對(duì)分組后的數(shù)據(jù)進(jìn)行指定的聚合操作。數(shù)據(jù)查詢(xún)操作2)agg聚合

該方法一般與groupBy方法配合使用。agg(expers:column*)可以傳入一個(gè)或多個(gè)Coumn對(duì)象,返回DataFrame。

以position職位進(jìn)行分組,計(jì)算各職位薪水的平均值,并命名為average_wages。數(shù)據(jù)查詢(xún)操作6、聚合函數(shù)

聚合是大數(shù)據(jù)分析領(lǐng)域中最常用的特性之一。SparkSQL提供了很多常用的聚合函數(shù),比如sum、count、avg等等。(1)count函數(shù)count可以執(zhí)行以下2種操作:對(duì)指定列進(jìn)行計(jì)數(shù);使用count(*)或count(1)對(duì)所有列進(jìn)行計(jì)數(shù)。(2)countDistinct函數(shù):此函數(shù)可以計(jì)算每個(gè)組的唯一項(xiàng)。數(shù)據(jù)查詢(xún)操作(3)approx_count_distinct函數(shù)

此函數(shù)的功能與countDistinct一樣,但是統(tǒng)計(jì)的結(jié)果允許有誤差。這里approx_count_distinct的另一個(gè)參數(shù)就指定了可容忍的誤差的最大誤差。(4)sum函數(shù):計(jì)算一個(gè)數(shù)字列中的所有值的總和。(5)sumDistinct函數(shù):計(jì)算一個(gè)數(shù)字列中不同值的總和,重復(fù)的數(shù)值將不被計(jì)算。數(shù)據(jù)查詢(xún)操作(6)avg函數(shù):計(jì)算一個(gè)數(shù)字列的平均值。(7)min函數(shù)、max函數(shù):統(tǒng)計(jì)出指定列的最小值和最大值。數(shù)據(jù)查詢(xún)操作7、連接操作

實(shí)際工作中,有時(shí)候數(shù)據(jù)并不是在同一個(gè)表中,此時(shí)根據(jù)業(yè)務(wù)需求,就需要連接兩個(gè)表才可以查詢(xún)相關(guān)的需求結(jié)果。在DataFrame中提供了join功能實(shí)現(xiàn)連接的效果。1)內(nèi)連接

內(nèi)連接查詢(xún)操作是列出與連接條件匹配的數(shù)據(jù)行,它使用比較運(yùn)算符比較被連接列的列值。數(shù)據(jù)查詢(xún)操作2)左外連接

此連接方式是以左表為基準(zhǔn),將數(shù)據(jù)進(jìn)行連接,然后將左表中所有數(shù)據(jù)都顯示,右表對(duì)應(yīng)的列設(shè)置為NULL。數(shù)據(jù)查詢(xún)操作3)右外連接

是以右表為基準(zhǔn),將數(shù)據(jù)進(jìn)行連接,然后將右表所有的數(shù)據(jù)進(jìn)行顯示,左表對(duì)應(yīng)的列設(shè)置為NULL。數(shù)據(jù)查詢(xún)操作4)全外連接全外連接是在等值連接的基礎(chǔ)上將左表和右表的未匹配數(shù)據(jù)都加上。數(shù)據(jù)查詢(xún)操作5)LeftSemi-Join這種join類(lèi)型的行為類(lèi)似于內(nèi)連接類(lèi)型,連接后的數(shù)據(jù)集只包含匹配的行。6)交叉連接(又稱(chēng)為Cartesian-笛卡爾連接)當(dāng)執(zhí)行join連接時(shí)不指定參數(shù),得到的也是笛卡爾積結(jié)果。數(shù)據(jù)探索分析

基于前述的知識(shí)與方法,本節(jié)將對(duì)在線銷(xiāo)售數(shù)據(jù)集orders.csv和order-details.csv進(jìn)行分析探索,解決情景導(dǎo)入中提出的問(wèn)題。1、數(shù)據(jù)準(zhǔn)備(1)上傳orders.csv和order-details.csv數(shù)據(jù)集到HDFS文件系統(tǒng)中。(2)加載數(shù)據(jù)集到RDD及DataFrame中。數(shù)據(jù)探索分析2、問(wèn)題分析(1)此數(shù)據(jù)集中每個(gè)客戶(hù)的下單數(shù)量是多少?

每個(gè)客戶(hù)的下單情況數(shù)據(jù)在DataFrameorders中。orders中的每一條數(shù)據(jù)就是一個(gè)訂單。因此,只需要對(duì)其中的full_name用戶(hù)姓名列進(jìn)行g(shù)roupBy()分類(lèi)并利用count()計(jì)算總數(shù)即可。最后還可以利用sort()方法,對(duì)客戶(hù)下單量進(jìn)行降序排序,獲得下單最多的用戶(hù)的信息。數(shù)據(jù)探索分析(2)每個(gè)城市的訂單有多少?此問(wèn)題的分析思路與前一題相同,只需將分析的列替換為city城市。數(shù)據(jù)探索分析(3)每個(gè)客戶(hù)的消費(fèi)總額是多少?

針對(duì)此問(wèn)題,需要對(duì)數(shù)據(jù)做一些轉(zhuǎn)換。觀察order-details.csv中的數(shù)據(jù)可以發(fā)現(xiàn),每一條記錄中記錄著商品的單價(jià)和銷(xiāo)售數(shù)量,并且有些商品是有折扣的。每條記錄中,有的商品銷(xiāo)售記錄是來(lái)自同一個(gè)訂單,也就是同一個(gè)客戶(hù)購(gòu)買(mǎi)的。所以要計(jì)算每個(gè)客戶(hù)的年消費(fèi)總額,首先要計(jì)算出每條記錄的消費(fèi)數(shù)量,接著根據(jù)訂單編號(hào)進(jìn)行求和,獲得每個(gè)客戶(hù)的消費(fèi)總額情況。1)計(jì)算orders_details中每行商品的實(shí)際銷(xiāo)售金額。實(shí)際銷(xiāo)售金額=商品價(jià)格*已訂購(gòu)數(shù)量-商品價(jià)格*已訂購(gòu)數(shù)量*折扣百分比2)按照訂單編號(hào)order_id統(tǒng)計(jì)每張訂單的總金額。

根據(jù)訂單編號(hào)"order_id"利用groupBy()對(duì)前面計(jì)算獲得的數(shù)據(jù)orders_details1進(jìn)行分類(lèi),再利用sum()函數(shù)對(duì)消費(fèi)金額expend_amount列進(jìn)行求和并重命名為OrderTotal,從而獲得每張訂單的總金額。數(shù)據(jù)探索分析3)進(jìn)行等值內(nèi)連接,并增加訂單總金額。

客戶(hù)編號(hào)、客戶(hù)名字等信息均在DateFrameorders中,每張訂單的總金額數(shù)據(jù)在ordertotal中,要想獲得“每個(gè)客戶(hù)的消費(fèi)總額”,就需要連接相關(guān)的數(shù)據(jù)表。數(shù)據(jù)探索分析(4)數(shù)據(jù)集中,客戶(hù)的平均訂單消費(fèi)額是多少?

對(duì)客戶(hù)編號(hào)cust_id和客戶(hù)名字full_name進(jìn)行g(shù)roupBy分類(lèi),再對(duì)Total_consumption做avg平均即可得到客戶(hù)的平均訂單消費(fèi)額。小結(jié)

本章介紹了使用SparkSQL進(jìn)行數(shù)據(jù)分析與探索。通過(guò)“女裝電子商務(wù)評(píng)論情況分析”和“在線銷(xiāo)售訂單數(shù)據(jù)分析”兩個(gè)案例掌握數(shù)據(jù)準(zhǔn)備、清洗、轉(zhuǎn)換、分析、輸出、查詢(xún)過(guò)程中用到的DataFrame操作方法。THANKS!6Zepplin數(shù)據(jù)可視化Zepplin安裝部署第一部分下載與安裝測(cè)試運(yùn)行Zeppelin情境導(dǎo)入

數(shù)據(jù)可視化可以使數(shù)據(jù)信息更清晰形象的展示給數(shù)據(jù)分析人員,也為數(shù)據(jù)分析結(jié)果匯報(bào)呈現(xiàn)提供了有效途徑。Zeppelin是Apache基金會(huì)下的一個(gè)開(kāi)源框架,它提供了一個(gè)數(shù)據(jù)可視化的框架。具有數(shù)據(jù)提取、數(shù)據(jù)發(fā)掘、數(shù)據(jù)分析、數(shù)據(jù)可視化展示與合作等功能。學(xué)習(xí)目標(biāo)和要求1、會(huì)下載、安裝、配置Zepplin可視化工具。2、會(huì)在Zepplin中配置Spark解釋器。下載與安裝Zepplin可視化工具的安裝包可以直接通過(guò)其官網(wǎng)下載。通過(guò)下載地址:/download.html,選擇zeppelin-0.10.1-bin-all.tgz包進(jìn)行下載。下載與安裝1、安裝步驟(1)將Zepplin安裝包上傳到master節(jié)點(diǎn)的/root目錄下。(2)解壓并重命名目錄。(3)修改配置文件zeppelin-env.sh。在文件最后添加以下配置內(nèi)容:下載與安裝2、Zeppelin控制臺(tái)

啟動(dòng)Zeppelin后,通過(guò)瀏覽器訪問(wèn)30:9090可以打開(kāi)Zeppelin控制臺(tái)。下載與安裝3、Zeppelin中的Spark解釋器配置

目前,Zeppelin支持Scala、Python、Flink、SparkSQL、Hive、JDBC、Markdown、Shell等多種解釋器。(1)anonymous用戶(hù)按鈕,打開(kāi)解釋器配置界面。(2)搜索spark解釋器,進(jìn)入spark解釋器配置界面進(jìn)行設(shè)置。測(cè)試運(yùn)行Zeppelin1、測(cè)試自帶的BasicFeature(Spark)案例

點(diǎn)擊菜單欄中的Notebook按鈕,找到并點(diǎn)擊SparkBasicFeatures,本案例是對(duì)一份銀行數(shù)據(jù)進(jìn)行分析及可視化。測(cè)試運(yùn)行Zeppelin2、測(cè)試運(yùn)行自編代碼(1)Zeppelin控制臺(tái)首頁(yè),點(diǎn)擊“Createnewnote”按鈕,創(chuàng)建一個(gè)新的notebook。(2)在彈出的窗口中填寫(xiě)新文件的路徑和名稱(chēng),選擇解釋器,此處選擇默認(rèn)的spark解釋器即可。最后點(diǎn)擊Create按鈕,創(chuàng)建文件。(3)在新建的notebook界面執(zhí)行以下代碼。女裝電子商務(wù)評(píng)論情況數(shù)據(jù)可視化第二部分加載數(shù)據(jù)注冊(cè)視圖執(zhí)行SQL數(shù)據(jù)可視化情境導(dǎo)入

在第五章中,我們利用SparkSQL在spark-shell中輸入代碼,對(duì)“女裝電子商務(wù)評(píng)論情況”數(shù)據(jù)集進(jìn)行了分析。但是通過(guò)此方法分析獲得的結(jié)果都是二維數(shù)據(jù)表數(shù)據(jù),數(shù)據(jù)特征不夠直觀生動(dòng),不利于總結(jié)分析匯報(bào)。因此,此女裝線上商店負(fù)責(zé)人希望能對(duì)數(shù)據(jù)進(jìn)行可視化,以幫助她們更好的進(jìn)行決策。在Zeppelin的notebook中使用SQL解釋器,可以將查詢(xún)的結(jié)果以條狀圖、散點(diǎn)圖、折線圖等常見(jiàn)的方式進(jìn)行可視化展示。學(xué)習(xí)目標(biāo)和要求1、掌握在Zepplin中使用SparkSQL注冊(cè)視圖2、能使用Zepplin執(zhí)行SparkSQL命令實(shí)現(xiàn)數(shù)據(jù)可視化。加載數(shù)據(jù)注冊(cè)視圖1、啟動(dòng)Hadoop集群、Spark集群和Zeppelin啟動(dòng)。在Zeppelin中創(chuàng)建一個(gè)新的notebook,并命名為“clothing_reviews”。2、讀取HDFS文件系統(tǒng)中的CSV文件,自定義schema并轉(zhuǎn)換為DataFrame。加載數(shù)據(jù)注冊(cè)視圖3、對(duì)“Clothing-Reviews.csv”女裝電子商務(wù)評(píng)論數(shù)據(jù)集進(jìn)行數(shù)據(jù)清洗,刪除重復(fù)的數(shù)據(jù),對(duì)有空缺數(shù)據(jù)的行進(jìn)行刪除。加載數(shù)據(jù)注冊(cè)視圖4、對(duì)“Clothing-Reviews.csv”女裝電子商務(wù)評(píng)論數(shù)據(jù)集進(jìn)行數(shù)據(jù)轉(zhuǎn)換,將recommended_IND(是否推薦)列中的1替換為推薦,0替換為不推薦。加載數(shù)據(jù)注冊(cè)視圖5、使用createOrReplaceTempView()方法創(chuàng)建本地的臨時(shí)視圖clothing_review

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論