大數(shù)據(jù)分析及應用項目教程(Spark SQL)(微課版) 課件全套 許慧 第1-6章 大數(shù)據(jù)分析概述、實踐環(huán)境準備- Zepplin數(shù)據(jù)可視化_第1頁
大數(shù)據(jù)分析及應用項目教程(Spark SQL)(微課版) 課件全套 許慧 第1-6章 大數(shù)據(jù)分析概述、實踐環(huán)境準備- Zepplin數(shù)據(jù)可視化_第2頁
大數(shù)據(jù)分析及應用項目教程(Spark SQL)(微課版) 課件全套 許慧 第1-6章 大數(shù)據(jù)分析概述、實踐環(huán)境準備- Zepplin數(shù)據(jù)可視化_第3頁
大數(shù)據(jù)分析及應用項目教程(Spark SQL)(微課版) 課件全套 許慧 第1-6章 大數(shù)據(jù)分析概述、實踐環(huán)境準備- Zepplin數(shù)據(jù)可視化_第4頁
大數(shù)據(jù)分析及應用項目教程(Spark SQL)(微課版) 課件全套 許慧 第1-6章 大數(shù)據(jù)分析概述、實踐環(huán)境準備- Zepplin數(shù)據(jù)可視化_第5頁
已閱讀5頁,還剩237頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第1章大數(shù)據(jù)分析概述關于大數(shù)據(jù)分析第一部分什么是大數(shù)據(jù)分析大數(shù)據(jù)分析可視化大數(shù)據(jù)分析工具學習目標和要求1、了解大數(shù)據(jù)分析的概念、特點、類別、優(yōu)缺點。2、知道大數(shù)據(jù)分析的相關工具。3、了解大數(shù)據(jù)分析可視化的概念及相關工具。什么是大數(shù)據(jù)分析12345Volume(容量)Velocity(速度)Variety(種類)Value(價值)Veracity(真實性)1、大數(shù)據(jù)的“5V”特征大數(shù)據(jù)是指無法在一定時間范圍內(nèi)用常規(guī)軟件工具進行捕捉、管理和處理的數(shù)據(jù)集合,大數(shù)據(jù)分析就是指對規(guī)模巨大的數(shù)據(jù)進行數(shù)據(jù)分析。什么是大數(shù)據(jù)分析2、大數(shù)據(jù)分析概念數(shù)據(jù)分析量大1234數(shù)據(jù)處理速度快數(shù)據(jù)分析類型多數(shù)據(jù)價值密度低3、大數(shù)據(jù)分析的特點BigDataAnalysis5數(shù)據(jù)的可靠性低什么是大數(shù)據(jù)分析什么是大數(shù)據(jù)分析4、大數(shù)據(jù)分析類別預測分析關注的是對未來事件的預測。預測性分析規(guī)范性分析是指在發(fā)生問題之后,根據(jù)問題診斷性分析之后,結合預測性分析,做出相應的優(yōu)化建議和行動。規(guī)范性分析針對過去已經(jīng)發(fā)生的事情,分析該事件產(chǎn)生的原因。診斷性分析描述性分析是描述過去的數(shù)據(jù),基于歷史數(shù)據(jù)描述發(fā)生了什么,對過去的大量歷史數(shù)據(jù)進行匯總分析描述,以簡單可讀的方式進行呈現(xiàn)。描述性分析為優(yōu)質(zhì)決策提供參考;提高產(chǎn)品開發(fā)創(chuàng)新力;改善客戶服務體驗;提升風險管理優(yōu)勢缺點信息透明化成本高數(shù)據(jù)質(zhì)量低技術更新變化快什么是大數(shù)據(jù)分析5、大數(shù)據(jù)分析的優(yōu)勢與缺點大數(shù)據(jù)分析工具(1)ApacheSpark:具有SparkSQL、Streaming實時計算、機器學習和SparkGraphX圖計算的內(nèi)置功能。(2)Hbase:HBase是一個基于HDFS的面向列的分布式數(shù)據(jù)庫。(3)Storm:Storm是流處理的代表性實現(xiàn)之一。Storm具有低延遲、高性能、分布式、可擴展、容錯、可靠性、快速等特點。(4)Flink:

Flink是一個框架和分布式處理引擎,用于在無邊界和有邊界數(shù)據(jù)流上進行有狀態(tài)的計算。1、Hadoop生態(tài)圈中的大數(shù)據(jù)分析工具123編程語言Scala語言:Scala語言是基于JVM運行環(huán)境、面向?qū)ο蠛秃瘮?shù)式編程的完美結合Python語言:Python在數(shù)據(jù)分析領域也是一個強大的語言工具。R語言:是大數(shù)據(jù)分析工具之一,可用于科學計算、統(tǒng)計分析、數(shù)據(jù)可視化等。大數(shù)據(jù)分析工具2、大數(shù)據(jù)分析編程語言RapidMiner其特點是拖拽操作,無需編程,運算速度快,具有豐富數(shù)據(jù)挖掘分析和算法功能,常用于解決各種商業(yè)關鍵問題。12MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫。旨在為WEB應用提供可擴展的高性能數(shù)據(jù)存儲解決方案。大數(shù)據(jù)分析工具3、其他工具

數(shù)據(jù)可視化是利用計算機以圖形圖表的形式將原始的抽象信息和數(shù)據(jù)直觀的表示出來。

大數(shù)據(jù)分析可視化工具有很多,比如Zeppelin、PowerBI、Tableau、Spass等等。大數(shù)據(jù)分析可視化認識SparkSQL第二部分SparkSQL背景簡介SparkSQL運行原理學習目標和要求1、了解SparkSQL的背景、特點。2、知道SparkSQL的運行架構。3、掌握Catalyst查詢編譯器的工作流程。4、掌握SparkSQL運行流程。HiveSharkSparkSQLHive是最原始的SQL-on-Hadoop工具。是Facebook開發(fā)的構建于Hadoop集群之上的數(shù)據(jù)倉庫應用,它提供了類似于SQL語句的HQL語句作為數(shù)據(jù)訪問接口脫離了Hive的依賴,SparkSQL在數(shù)據(jù)兼容、組件擴展、性能優(yōu)化方面都得到了極大的提升。Shark是使用Scala語言開發(fā)的開源SQL查詢引擎。其設計目標是作為Hive的補充,性能比Hive提高了10-100倍。但是Shark對于Hive依舊存在很多的依賴。SparkSQL背景簡介1、SparkSQL的背景多種性能優(yōu)化技術組件擴展性用戶可以對SQL的語法解析器、分析器以及優(yōu)化器進行重新定義和開發(fā),并動態(tài)擴展。采用內(nèi)存列存儲(In-MemoryColumnarStorage),字節(jié)碼生成技術(byte-codegeneration),CostModel對查詢操作進行動態(tài)評估、獲取最佳物理計劃等。支持多種數(shù)據(jù)源可以在Hive上運行SQL或者HQL;可以從RDD、parquet文件、JSON文件中獲取數(shù)據(jù)。SparkSQL背景簡介2、SparkSQL的特點SparkSQL背景簡介多種性能優(yōu)化技術內(nèi)存列存儲(In-MemoryColumnarStorage)JVM對象存儲和內(nèi)存列存儲對比SparkSQL背景簡介多種性能優(yōu)化技術字節(jié)碼生成技術(byte-codegeneration)例如執(zhí)行selecta+bfromtable這條命令通用的SQL方法:首先將生成一個表達式,并多次調(diào)用虛函數(shù)。SparkSQL:在其catalyst模塊的expressions中增加了codegen模塊。使用動態(tài)字節(jié)碼生成技術來優(yōu)化其性能,對匹配的表達式采用特定的代碼動態(tài)編譯,然后運行。SparkSQL運行原理1、SparkSQL的運行架構SparkSQL的整體架構SparkSQL是由Catalyst,Core,Hive和Hive-Thriftserver四個子項目組成。SparkSQL運行原理(1)Catalyst:負責處理整個查詢過程,包括解析、綁定、優(yōu)化等,將SQL語句轉換成物理執(zhí)行計劃。(2)Core:用于將Catalyst的邏輯查詢計劃轉換為SparkRDD代碼。(3)Hive:Hive組件包括HiveContext和SQLContext,允許用戶使用HiveQL的子集編寫查詢。(4)Hive-Thriftserver:支持HiveServer和CLI。SparkSQL運行原理2、Catalyst查詢編譯器(1)Catalyst的組成:Parser、Analyzer、Optimizer、Planner(2)Catalyst的工作流程Catalyst運行流程SparkSQL運行原理3、SparkSQL的運行原理(1)傳統(tǒng)SQL的運行流程詞法和語法解析(Parse)綁定(Bind)優(yōu)化(Optimize)執(zhí)行(Execute)SparkSQL運行原理(2)SparkSQL運行流程SessionCatalog保存元數(shù)據(jù)ANTLR生成未綁定的邏輯計劃Analyzer綁定邏輯計劃Optimizer優(yōu)化邏輯計劃SparkPlanner生成可執(zhí)行的物理計劃CostModel選擇最佳物理執(zhí)行計劃execute執(zhí)行物理計劃小結

本章首先對大數(shù)據(jù)分析進行了介紹,詳細闡述了大數(shù)據(jù)分析的相關概念、特點、類別及優(yōu)缺點;簡單介紹了大數(shù)據(jù)分析的常用工具;并對大數(shù)據(jù)分析可視化的優(yōu)勢價值等進行了分析。然后對大數(shù)據(jù)分析工具中的SparkSQL展開了詳盡的描述,包括SparkSQL的發(fā)展演變歷程、特點、運行架構原理等內(nèi)容。THANKS!第2章實踐環(huán)境準備Hadoop集群環(huán)境搭建第一部分環(huán)境準備啟動Hadoop集群運行經(jīng)典案例wordcount安裝Hadoop學習目標和要求1、掌握Hadoop集群環(huán)境搭建的環(huán)境準備工作,包括配置主機名、防火墻設置、免密登錄設置、Java環(huán)境設置。2、掌握安裝Hadoop的過程、配置文件設置及啟動集群的方法。3、會在Hadoop集群運行經(jīng)典案例wordcount。環(huán)境準備1、集群節(jié)點規(guī)劃此集群由三個節(jié)點構成,分別是master、slaver01、slaver02。集群搭建部署均在虛擬機中完成,使用VMwareWorkstation16Pro虛擬計算機軟件。環(huán)境準備2、配置主機名和IP(1)修改對應虛擬機的IP地址:

vi/etc/sysconfig/network-scripts/ifcfg-ens33(2)將三臺虛擬機的主機名修改為master、slaver01、slaver02。

hostnamectlset-hostname主機名(3)重啟網(wǎng)絡,使網(wǎng)絡配置生效。

systemctlrestartnetwork環(huán)境準備3、連接MobaXterm終端工具使用MobaXterm終端工具,為master、slaver01和slaver02創(chuàng)建SSH連接。環(huán)境準備4、關閉防火墻

防火墻是對服務器進行保護的一種服務,但有時候會帶來很多麻煩,它會妨礙Hadoop集群間的相互通信,所以我們要關閉防火墻。關閉master、slaver01和slaver02主機的防火墻,并設置開機不自啟。systemctlstatusfirewalldsystemctlstopfirewalldsystemctldisablefirewalldsystemctlstatusfirewalld環(huán)境準備5、關閉SElinuxSELINUX是對系統(tǒng)安全級別更細粒度的設置。關閉master、slaver01和slaver02主機的SElinux。vi/etc/sysconfig/selinux環(huán)境準備6、修改/etc/hosts文件修改master、slaver01和slaver02主機的/etc/hosts文件,建立主機和ip地址之間的映射關系。vi/etc/hosts7、配置免密登錄首先在master節(jié)點創(chuàng)建生成密鑰。將密鑰拷貝到slaver01和slaver02兩個節(jié)點,完成免密登錄配置。環(huán)境準備8、配置Java環(huán)境在master節(jié)點上傳JDK軟件包并解壓。在.bash_profile文件中配置環(huán)境變量。使用source.bash_profile命令,使.bash_profile文件配置生效。查看Java版本,驗證安裝成功。使用scp命令將jdk解壓安裝相關文件分發(fā)到slaver01和slaver02節(jié)點。安裝Hadoop

由于三個節(jié)點都需要安裝Hadoop,為了提高部署效率,先在master節(jié)點進行部署安裝,然后將相關的文件和配置拷貝分發(fā)到另外兩個節(jié)點中。上傳Hadoop安裝包并解壓。修改環(huán)境變量。使環(huán)境變量生效。修改hadoop的配置文件hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、workers。分發(fā)Hadoop和環(huán)境變量文件到slaver01和slaver02。格式化HDFS文件系統(tǒng)。啟動Hadoop集群1、啟動Hadoop集群只需要在master節(jié)點輸入start-all.sh。接著查看各節(jié)點的服務進程。2、打開Google瀏覽器,輸入地址30:8088,可以打開Yarn頁面。3、輸入地址30:9870,可以打開HDFS頁面。案例wordcount通過經(jīng)典案例wordcount,體驗Hadoop運行MapReduce計算。1、在本地root目錄下創(chuàng)建一個txt文件,輸入一段自定義文字。2、上傳文本到到hdfs。案例wordcount3、運行命令并查看結果hadoopjarhadoop-mapreduce-examples-3.2.1.jarwordcount/input/outputSpark集群部署與使用第二部分Spark安裝啟動SparkSpark集群測試學習目標和要求1、掌握Spark集群安裝配置方法。2、會啟動關閉Spark集群。3、能使用Spark-shell進行簡單編程測試。Spark安裝1、上傳軟件包使用MobaXterm工具,將軟件包上傳至master節(jié)點的root目錄下,然后將其解壓到/usr/local目錄中。Spark安裝2、在.bash_profile文件中修改環(huán)境變量執(zhí)行source.bash_profile使環(huán)境變量生效Spark安裝3、修改Spark配置文件(1)配置spark-env.sh文件(2)配置workers文件4、復制修改spark啟動腳本,避免和hadoop的啟動腳本沖突。5、分發(fā)Spark安裝文件到slaver01和slaver02。啟動Spark1、在master節(jié)點輸入start-spark-all.sh,啟動Spark。2、查看各節(jié)點服務進程狀態(tài)(此處已經(jīng)啟動Hadoop集群)啟動Spark3、Web查看Spark主頁情況在瀏覽器中輸入地址30:8080/,進行查看。Spark集群測試1、使用spark-submit工具提交Spark作業(yè)spark-submit提交任務及參數(shù)說明:--class:應用程序的主類,僅針對java或scala應用。--master:master的地址,提交任務到哪里執(zhí)行,例如spark://host:port,yarn,local。--driver-memory:driver進程所使用的內(nèi)存數(shù)量,以字節(jié)為單位??梢灾付ú煌暮缶Y如“512m”或“15g”,默認是1G。--executor-memory:executor使用的內(nèi)存數(shù)量,以字節(jié)為單位??梢灾付ú煌暮缶Y如“512m”或“15g”,默認是1G。--total-executor-cores:所有executor總共的核數(shù)。僅僅在mesos或者standalone下使用。Spark集群測試Spark集群測試2、使用Spark-sql(1)輸入spark-sql命令,啟動spark-sql。(2)使用SQL命令,執(zhí)行創(chuàng)建數(shù)據(jù)庫、創(chuàng)建表等操作。Spark集群測試3、使用Sparkshell(1)輸入spark-shell命令,啟動spark-shell。(2)執(zhí)行SparkShell常用命令Spark集群測試(2)執(zhí)行SparkShell常用命令①:help命令,查看SparkShell常用的命令Spark集群測試(2)執(zhí)行SparkShell常用命令②:paste命令,進入paster模式Scala安裝第三部分下載安裝包安裝配置學習目標和要求1、會下載、安裝配置Scala工具。2、能啟動Scala進行編程測試。下載安裝包通過連接地址/download/2.13.6.html直接下載scala-2.13.6.tgz壓縮包。安裝配置1上傳安裝包并解壓2配置環(huán)境變量,添加Scala相關配置安裝配置3使環(huán)境變量生效,查看Scala版本4啟動Scala小結

本章通過詳細的操作步驟與結果分析,介紹Hadoop集群環(huán)境搭建、Spark集群部署與使用、Scala的安裝運行。詳細闡述了各個集群環(huán)境搭建中的相關配置文件。THANKS!第3章學生信息處理分析班級基本情況分析第一部分學生所屬班級和男女生數(shù)量以班級為單位整理學生信息情境導入

現(xiàn)有一份某校信息工程學院所有班級學生的基本情況數(shù)據(jù),如下圖所示。數(shù)據(jù)包含8個字段,分別為學號、姓名、性別、年級、班級、語文成績、數(shù)學成績、英語成績。當下輔導員想通過一位學生的學號獲知其所屬的班級,同時也想對各班級基本情況進行了解,以便后續(xù)的工作開展。學習目標和要求掌握Scala判斷與循環(huán)、函數(shù)式編程。掌握Scala集合操作。掌握Scala數(shù)據(jù)類型、常量與變量、運算符、數(shù)組。學生所屬班級和男女生數(shù)量——理論基礎1、數(shù)據(jù)類型數(shù)據(jù)類型類型描述Byte表示8位有符號補碼整數(shù)。其數(shù)值區(qū)間從-128到127。Short表示16位有符號補碼整數(shù)。其數(shù)值區(qū)間為-32768到32767。Int表示32位有符號補碼整數(shù)。其數(shù)值區(qū)間為-2147483648到2147483647。表示只能保存整數(shù)。Long表示64位有符號補碼整數(shù)。其數(shù)值區(qū)間為-9223372036854775808到9223372036854775807。Float表示32位IEEE754標準的單精度浮點數(shù)。如果浮點數(shù)后面有f或者F后綴時,表示這是一個Float類型,否則就是一個Double類型的。Double表示64位IEEE754標準的雙精度浮點數(shù)。Char表示16位無符號Unicode字符,區(qū)間值為U+0000到U+FFFF。String表示字符序列。即字符串,使用時需要使用雙引號包含一系列字符。Boolean其值為true或false。Unit表示無值,和其他語言中void等同。用于不返回任何結果的方法的結果類型。Unit只有一個實例值,寫成()。Nullnull或空引用NothingNothing類型在Scala的類層級的最底端,是任何其他類型的子類型。AnyAny是所有其他類的超類。AnyRefAnyRef類是Scala里所有引用類(referenceclass)的基類。Scala與Java的數(shù)據(jù)類型相同,但是Scala中的數(shù)據(jù)類型都是對象即Scala沒有java中的原生類型。因此Scala可以對數(shù)字等基礎類型調(diào)用方法。學生所屬班級和男女生數(shù)量——理論基礎2、常量與變量1)定義方法在Scala中,定義常量的關鍵字是“val”,語法格式如下:

val常量名稱:數(shù)據(jù)類型=初始值val一經(jīng)初始化就無法再進行修改,否則會報錯。在Scala中,定義變量的關鍵字是“var”,語法格式如下:

var變量名稱:數(shù)據(jù)類型=初始值學生所屬班級和男女生數(shù)量——理論基礎2)數(shù)據(jù)類型推斷

Scala具備數(shù)據(jù)類型推斷的功能,因此在定義常量或者變量時,可以不用特地說明數(shù)據(jù)的類型,即可以不在常量或變量名稱后面添加“:type”數(shù)據(jù)類型項。3)多變量聲明學生所屬班級和男女生數(shù)量——理論基礎A.若聲明的多個變量初始值相同,則只需用逗號分隔:B.若聲明的多個變量初始值不相同,則需將它們聲明為元組:3、運算符運算符類別運算符描述舉例算數(shù)運算符舉例中假設a=1,b=2算數(shù)運算符

+加號a+b運算結果為3-減號a-b運算結果為-1*乘號a*b運算結果為2/除號b/a運算結果為2%取余b%a運算結果為0Scala中運算符即方法、方法即運算符。學生所屬班級和男女生數(shù)量——理論基礎學生所屬班級和男女生數(shù)量——理論基礎關系運算符舉例中假設a=1,b=2關系運算符==等于a==b運算結果為false>大于a>b運算結果為false<小于a<b運算結果為true>=大于等于a>=b運算結果為false<=小于等于a<=b運算結果為true!=不等于a!=b運算結果為true邏輯運算符舉例中假設變量a為1,b為0邏輯運算符&&與,當兩個條件均成立則為真,否則為假a&&b運算結果為false||或,當兩個條件有一個成立則為真,否則為假a||b運算結果為true!非,對當前條件取反!(a&&b)運算結果為true學生所屬班級和男女生數(shù)量——理論基礎位運算符舉例中假設a=00111100,b=00001101位運算符&按位與,數(shù)據(jù)按照二進制位進行運算,兩位均為1則結果為1,否則為0a&b的運算結果為00001100|按位或,數(shù)據(jù)按照二進制位進行運算,兩位有一個為1則結果為1a|b的運算結果為00111101^按位異或,數(shù)據(jù)按照二進制位進行運算,兩位不同時結果為1,相同時為0a^b的運算結果為00110001~按位取反,數(shù)據(jù)按照二進制位進行運算,是1則變?yōu)?,是0則變成1~a的運算結果為11000011<<數(shù)據(jù)按照二進制位進行運算,左移a<<2的運算結果為11110000>>數(shù)據(jù)按照二進制位進行運算,右移a>>2的運算結果為00001111>>>數(shù)據(jù)按照二進制位進行運算,無符號右移a>>>2的運算結果為00001111學生所屬班級和男女生數(shù)量——理論基礎賦值運算符=指定右邊操作結果賦值給左邊c=a+b將a+b的運算結果賦值給c+=左右兩側相加后賦值給左邊c+=a即c=c+a-=左右兩側相減后賦值給左邊c-=a即c=c-a*=左右兩側相乘后賦值給左邊c*=a即c=c*a/=左右兩側相除后賦值給左邊c/=a即c=c/a%=左右兩側求余后賦值給左邊c%=a即c=c%a<<=按位左移后再賦值給左邊c<<=a即c=c<<a>>=按位右移后再賦值給左邊c>>=a即c=c>>a&=按位與運算后賦值給左邊c&=a即c=c&a|=按位或運算后再賦值給左邊c|=a即c=c|a^=按位異或運算后再賦值給左邊c^=a即c=c^a學生所屬班級和男女生數(shù)量——理論基礎4、數(shù)組

在Scala語言中,提供了一種數(shù)據(jù)結構叫作數(shù)組,數(shù)組是用于存儲相同類型變量的集合。數(shù)組分為定長數(shù)組(Array)和變長數(shù)組(ArrayBuffer)。1)聲明與定義方式使用new的完整形式,其語法如下:vararrname:Array[type]=newArray[type](size)使用new的簡寫形式,其語法如下:vararrname=newArray[type](size)使用定義并初始化的方式,其語法如下:vararrname=Array(element1,element2,element3)變長數(shù)組:定義與聲明方式與定長數(shù)組的相同,但是需要先導入importscala.collection.mutable.ArrayBuffer依賴包。定長數(shù)組:學生所屬班級和男女生數(shù)量——理論基礎2)基本操作方法

數(shù)組的基本操作方法:基本操作描述arr.sum對于Int數(shù)據(jù)類型的數(shù)組,返回數(shù)組各元素的和arr.max對于Int數(shù)據(jù)類型的數(shù)組,返回數(shù)組各元素的最大值arr.min對于Int數(shù)據(jù)類型的數(shù)組,返回數(shù)組各元素的最小值arr.length返回數(shù)組的長度arr.sorted.toBuffer對于Int數(shù)據(jù)類型的數(shù)組,返回數(shù)組各元素由小到大排序結果arr.reverse.toBuffer對于Int數(shù)據(jù)類型的數(shù)組,返回數(shù)組各元素倒序arr.contains(x)判斷數(shù)組中是否包含x元素arr.isEmpty判斷數(shù)組是否為空學生所屬班級和男女生數(shù)量——理論基礎5、判斷與循環(huán)Scala的判斷與循環(huán)語法與其他計算機語言一樣。if判斷可以對數(shù)據(jù)進行過濾判斷處理,while和for循環(huán)可以在某一條件下將某段代碼進行重復執(zhí)行。1)if判斷if判斷有三種形式,分別為if語句、if…else語句、if…elseif…else語句和if…else嵌套語句。2)循環(huán)在Scala語言中循環(huán)也有三種方式,分別為while循環(huán)、do...while循環(huán)和for循環(huán)。學生所屬班級和男女生數(shù)量——理論基礎6、函數(shù)式編程1)函數(shù)的定義和調(diào)用def函數(shù)名[參數(shù)列表]:[返回值類型]={

函數(shù)體return[表達式]}函數(shù)調(diào)用的方法如下:

函數(shù)名[參數(shù)列表]函數(shù)的定義方法:學生所屬班級和男女生數(shù)量——理論基礎2)匿名函數(shù)匿名函數(shù)是指不含函數(shù)名稱的函數(shù)。使用“=>”定義,“=>”的左邊為參數(shù)列表,“=>”右邊為函數(shù)體表達式。匿名函數(shù)雖然沒有函數(shù)名,但是可以將其賦值給一個常量或者變量,然后通過常量或者變量名進行函數(shù)調(diào)用。學生所屬班級和男女生數(shù)量——理論基礎3)高階函數(shù)

高階函數(shù)是指使用其他函數(shù)作為參數(shù),或者使用函數(shù)作為輸出結果的函數(shù)。舉例:使用其他函數(shù)作為參數(shù)的高階函數(shù)學生所屬班級和男女生數(shù)量——理論基礎舉例,使用函數(shù)作為輸出結果的高階函數(shù)學生所屬班級和男女生數(shù)量——理論基礎4)閉包閉包是一個函數(shù),是可以訪問一個函數(shù)里面局部變量的另外一個函數(shù)。定義一個函數(shù):valmore=2defaddmore=(x:Int)=>x+moreaddmore(3)定義addmore函數(shù)的過程就是“捕獲”其自由變量從而“閉合”該函數(shù)的動作。學生所屬班級和男女生數(shù)量——理論基礎5)函數(shù)柯里化

函數(shù)編程中,接受多個參數(shù)的函數(shù)都可以轉化為接受單個參數(shù)的函數(shù),這個轉化過程就是柯里化??吕锘旧硪灿玫搅碎]包。//未柯里化方式defmul(x:Int,y:Int)=x*ymul(2,2)//閉包方式defmulclosure(x:Int)=(y:Int)=>x*yprintln(mulclosure(3)(4))//函數(shù)柯里化方式defmulcurry(x:Int)(y:Int)=x*yprintln(mulcurry(5)(6))學生所屬班級和男女生數(shù)量——理論基礎6)嵌套函數(shù)嵌套函數(shù)即在函數(shù)內(nèi)部定義函數(shù),其中內(nèi)部函數(shù)稱為局部函數(shù)。學生所屬班級和男女生數(shù)量——編程分析實現(xiàn)1、判斷學生所屬班級

完成此任務首先需要用數(shù)組存儲各個班級學生的學號,然后定義函數(shù)識別某個學生的學號獲取其所屬班級。1)定義班級數(shù)組2)定義distinguish函數(shù),利用if…elseif…else語句進行判斷識別學號。2、統(tǒng)計男女生人數(shù)信息

定義函數(shù)count(sex:String)統(tǒng)計男女生人數(shù)。在count(sex:String)函數(shù)中利用數(shù)組存儲數(shù)據(jù)信息,通過for循環(huán)遍歷數(shù)組并利用if判斷數(shù)組中元素是否包含指定性別,并進行sum計數(shù)。以班級為單位整理學生信息——理論基礎1、列表Scala列表與數(shù)組類似,所有元素的類型都相同。它們的區(qū)別首先是列表是不可變的,其次列表具有遞歸的結構而數(shù)組不是。1)定義列表定義不可變列表語法://創(chuàng)建一個包含值1,值2,值3,值...的不可變列表var/val變量名:List[元素類型]=List[元素類型](值1,值2,值3,值...)//使用“::”拼接方式來創(chuàng)建列表,必須在最后添加一個Nilval/var變量名=值1::值2::Nil以班級為單位整理學生信息——理論基礎//導入相關依賴包importscala.collection.mutable.ListBuffer//創(chuàng)建一個空的可變列表val/var變量名:ListBuffer[類型]=newListBuffer[類型]()//創(chuàng)建一個包含值1,值2,值3...的可變列表val/var變量名=ListBuffer(值1,值2,值3...)定義可變列表語法:以班級為單位整理學生信息——理論基礎2)列表的常用操作以下是可變和不可變列表的常用操作。方法(對列表a和b進行操作)描述a.isEmpty判斷列表是否為空a++b拼接兩個列表a.head獲取列表的首個元素a.tail獲取列表除首個元素以外的剩余部分a.reverse反轉列表a.take(num)獲取指定個數(shù)的前綴a.drop(num)刪除從左邊開始的num個元素a.toString轉換字符串a(chǎn).toArray將列表轉換為數(shù)組List.concat(a,b)合并兩個列表ersect(b)對兩個列表取交集a.diff(b)對兩個列表取差集a(索引值)獲取列表中指定索引值的元素以班級為單位整理學生信息——理論基礎可變列表的常用操作方法(對列表a和b進行操作)描述a+=元素為列表添加元素a++=b追加一個列表a-=元素刪除列表中的元素a.toList將可變列表轉換為不可變列表

雖然可變和不可變列表都有添加、刪除、合并等操作,但是兩者有一個非常大的差別。對不可變列表進行操作,會產(chǎn)生一個新的列表,原來的列表并沒有改變。對可變列表進行操作,改變的是該列表本身。2、Set集合以班級為單位整理學生信息——理論基礎Set是無序,不可重復的集合。Set集合分為可變的和不可變的。Scala默認創(chuàng)建的是不可變的Set集合,若要創(chuàng)建可變的Set集合,需要先導入依賴包。1)定義Set集合

val

變量名:Set[類型]=Set[類型](值1,值2,值3...)舉例:vala=Set(9,2,5,4,8)以班級為單位整理學生信息——理論基礎可變和不可變Set集合的常用操作方法方法(對Set集合a或b進行操作)描述a.drop(num)刪除從左邊開始的num個元素a.contains(元素)判斷集合是否包含此元素a.size集合的大小a++b合并Set集合2)Set的基本操作以班級為單位整理學生信息——理論基礎不可變Set集合的添加/刪除操作方法方法(對不可變Set集合a和b進行操作)描述a+元素添加元素a-元素刪除元素可變Set集合的添加/刪除操作方法方法(對可變Set集合a和b進行操作)描述b.add(元素)添加元素b.remove(元素)刪除元素b+=元素添加元素b-=元素刪除元素a++=b元素合并Set集合3、元組以班級為單位整理學生信息——理論基礎

元組是不同類型值的聚集,它可以將不同類型的值放在一個變量中進行存儲。定義元組的語法一:valtuple=(元素1,元素2,元素3…)定義元組的語法二:valt=newTuplen(元素1,元素2,元素3...元素n)

當需要訪問元組中的某個元素的值時,可以通過“元組名_元素索引”進行訪問。4、Map映射以班級為單位整理學生信息——理論基礎1)映射定義:

映射是一系列鍵值對的集合。映射中的鍵都是唯一的,并且可以通過鍵獲取值??勺冇成涞亩x需要先導入相關依賴包。2)映射的常用操作:方法(對映射a和b進行操作)描述a.keys獲取所有的keya.values獲取所有的valuea(key)使用key獲取value,如果key不存在會報錯a.contains(key)查看Map中是否存在指定的keya.isEmpty檢查map是否為空a++b合并兩個map,如果key重復,++后者會替換掉前邊的key對應的value5、函數(shù)組合器以班級為單位整理學生信息——理論基礎

函數(shù)組合器在實際操作中非常實用。組合器包括map、filter、foreach、groupBy、flatten、drop、zip等。組合器可以對集合中的每個元素進行指定的操作,并將結果形成集合輸出。組合器描述map將某個函數(shù)應用到中的每個元素,并將結果形成集合輸出。filter指定條件,對集合中的元素進行過濾foreach對集合中的每個元素進行作用,但是沒有返回值。groupBy對集合中的元素進行分組操作,得到一個Map。flatten可以把嵌套的結構展開。drop去掉集合前面的n個元素zip將兩個集合結合在一起以班級為單位整理學生信息——編程分析實現(xiàn)

以班級為單位整理學生信息,可以先將數(shù)據(jù)保存到列表中,然后使用groupBy組合器以班級為條件進行分組。1)在scala命令輸入行輸入以下命令,創(chuàng)建列表保存數(shù)據(jù)。valdata=List("21103,嚴林石,男,21級,大數(shù)據(jù)1班,89,97,91","21108,莊偉康,男,21級,大數(shù)據(jù)1班,67,94,87","21208,陳心雨,女,21級,大數(shù)據(jù)2班,84,92,91","21107,鄒和俊,男,21級,大數(shù)據(jù)1班,77,83,88")以班級為單位整理學生信息——編程分析實現(xiàn)2)接著應用groupBy組合器進行分組,分組條件是班級。因此需要選取班級列進行操作,使用“,”對列表中每條數(shù)據(jù)進行split分隔,班級數(shù)據(jù)是在第4列。由此實現(xiàn)了以班級為單位整理學生信息。學生基本情況獲取第二部分學生特長情況學生成績情況分析情境導入

在掌握了前一節(jié)中Scala的基本知識后,李雷同學提出了新的疑問。Scala作為一門純粹的面向?qū)ο蟮恼Z言它的類和對象又有什么特點?定義和使用方法又是如何的?通過接下來對Scala類和對象、模式匹配等知識的學習,能對學生特長情況與成績情況進行分析。學習目標和要求1、了解Scala類和對象、模式匹配的基本概念。2、掌握Scala類和對象、模式匹配的定義及操作方法。3、能綜合應用Scala基礎知識編寫應用程序進行數(shù)據(jù)分析。1、類和對象學生特長情況——理論基礎

類和對象是Scala面向?qū)ο笳Z言的兩個重要概念。類是對象的抽象,而對象是類的具體實例。類的定義方式如下:Class類名稱(參數(shù)列表){//定義類的字段和方法}

繼承是面向?qū)ο箝_發(fā)語言中的一個概念,繼承可以使得子類具有父類的屬性和方法或者重新定義、追加屬性和方法等??梢允沟米宇悇e具有父類別的各種屬性和方法,而不需要再次編寫相同的代碼,可以有效復用代碼。但是Scala是單繼承,只能繼承一個父類。繼承類需要用到關鍵字extends。學生特長情況——理論基礎繼承的語法如下:class子類名extends父類名{類體}注意:子類繼承父類中非抽象的方法(即已經(jīng)實現(xiàn)的方法)必須使用override修飾符。2、單例對象和伴生對象學生特長情況——理論基礎1)單例對象單例對象是一種特殊的類,有且只有一個實例。定義一個單例對象的語法如下:object單例對象名{}2)半生對象

若在同一個代碼文件內(nèi)部,同時出現(xiàn)了classA和objectA,即類名和單例對象名完全相同,那么它們兩者就互為伴生關系。3、模式匹配學生特長情況——理論基礎

模式匹配(patternmatching)是Scala中十分強大的一個語言特性。模式匹配基本語法如下所示:xmatch{ casepattern1=>doSomething casepattern2=>doothers...}學生特長情況——編程分析實現(xiàn)

學生特長情況數(shù)據(jù)speciality.txt包括三個字段,分別是學生學號、姓名、特長類別?,F(xiàn)要獲知某一類特長的學生情況,可以先定義一個object單例對象。在此對象中讀取數(shù)據(jù)文件,并轉換成數(shù)組。接著遍歷數(shù)組,搜索包括某類特長的學生數(shù)據(jù)并打印。思路分析:綜合案例——學生成績情況分析data.txt原始數(shù)據(jù)字段信息字段含義stuid學號name姓名sex性別grade年級class班級Chinese語文成績Math數(shù)學成績English英語成績

現(xiàn)要求使用Scala函數(shù)式編程,綜合本章前面所學知識,進行學生成績分析統(tǒng)計。獲得各門課程的平均成績和及格人數(shù)(大于60),每個同學所有課程的總成績。小結

本章詳細介紹Scala的一些基本知識、操作方法,包括函數(shù)、表達式、判斷與循環(huán)、數(shù)據(jù)結構、類和對象等。并完成了“班級基本情況分析”和“學生基本情況獲取”。THANKS!第4章房產(chǎn)大數(shù)據(jù)分析與探索某房產(chǎn)公司銷售人員業(yè)績分析第一部分數(shù)據(jù)集處理數(shù)據(jù)操作分析情境導入

員工業(yè)績考核分析是企業(yè)工作總結的重要組成部分。從業(yè)績分析中員工可以清楚的知道自己的工作應該達到何種標準,發(fā)現(xiàn)自己的工作長處和不足,激發(fā)工作的積極性。管理者可以清楚的了解員工的工作情況,通過分析不足,幫助員工改進、提高業(yè)績,促進企業(yè)的發(fā)展進步。假設現(xiàn)有某房產(chǎn)公司一個部門員工的某年銷售業(yè)績數(shù)據(jù),請幫助部門經(jīng)理對其進行統(tǒng)計分析,獲取相關信息。學習目標和要求1、掌握將數(shù)據(jù)構建為RDD的方法。2、能使用RDD的各種轉換和行動操作對數(shù)據(jù)集進行處理分析。3、會對處理完成的數(shù)據(jù)進行存儲操作。數(shù)據(jù)集處理

在Spark中最核心最基礎的概念是彈性分布式數(shù)據(jù)集(ResilientDistributedDatasets,RDD)。它是一種分布式的內(nèi)存抽象,可以基于任何數(shù)據(jù)結構進行創(chuàng)建。

創(chuàng)建RDD的方法有兩種,一種是基于內(nèi)存(集合)創(chuàng)建RDD,另一種是從外部數(shù)據(jù)集創(chuàng)建。1、基于內(nèi)存(集合)創(chuàng)建RDD。

從集合中創(chuàng)建RDD,主要提供了兩個方法:使用SparkContext類中的parallelize和makeRDD兩個方法。數(shù)據(jù)集處理(1)parallelize方法創(chuàng)建RDD

此方法有兩個參數(shù)可以輸入,第一個參數(shù)用來接收一個集合。第二個參數(shù)是可選的,用于指定創(chuàng)建的RDD的分區(qū)數(shù)。(2)makeRDD方法創(chuàng)建RDDmakeRDD方法和parallelize方法類似,但它可以指定每個分區(qū)的首選位置。數(shù)據(jù)集處理2、從外部存儲數(shù)據(jù)構造RDD數(shù)據(jù)集處理

讀取一個放在文件系統(tǒng)中的數(shù)據(jù)進行創(chuàng)建RDD。從本地文件創(chuàng)建,主要用于測試;使用HDFS文件獲取外部數(shù)據(jù)集創(chuàng)建,實踐操作中最常用。通過調(diào)用SparkContext的textFile方法讀取數(shù)據(jù)集。調(diào)用命令如下:textFile("/my/directory")textFile("/my/directory/*.txt")textFile("/my/directory/*.gz")(1)加載HDFS上存儲的CSV文件構造一個RDD數(shù)據(jù)集處理

從HDFS中的數(shù)據(jù)創(chuàng)建RDD,首先需要定義文件在HDFS上存儲的路徑,然后根據(jù)路徑使用sc.textFile()方法進行創(chuàng)建。//定義HDFS上test.csv文件的存儲路徑valHDFSfile="/Chapter4/test.csv"

//使用textFile方法,加載文件并構造RDDvalHDFSrdd=sc.textFile(HDFSfile)

//查看返回值HDFSrdd.collect()(2)加載本地Linux中的文件構造一個RDD數(shù)據(jù)集處理

讀取本地Linux中的文件構造RDD也是通過sc.textFile("path")的方法,在path路徑前面加上“file:///”表示從本地文件系統(tǒng)讀取數(shù)據(jù)。3、操作練習——構建員工業(yè)績RDD數(shù)據(jù)集處理(1)上傳數(shù)據(jù)集到HDFS文件系統(tǒng)中。(2)從HDFS文件系統(tǒng)中讀取文件并創(chuàng)建RDD。數(shù)據(jù)操作分析1、RDD支持的兩種操作。(1)轉換操作:就是對RDD中的數(shù)據(jù)進行各種轉換。方法名稱作用map將RDD中的每一個數(shù)據(jù)元素通過func函數(shù)轉換,返回新的RDD。flatmap首先將map方法應用于RDD的所有元素,然后將結果扁平化拆分,返回一個新的RDD。sortby通過指定條件對RDD中的元素進行排序。filter通過指定條件對RDD中的元素進行過濾。distinct對RDD中的所有元素去重,返回一個去重后的RDD。union將兩個RDD進行合并,返回合并后的數(shù)據(jù)集。keys返回PairRDD中的“鍵”形成的新的RDD。values返回PairRDD中的“值”形成的新的RDD。reducebykey對“鍵”相同的值使用指定的函數(shù)進行聚合操作。groupbykey對“鍵”相同的值根據(jù)指定條件進行分組。sortbykey根據(jù)“鍵”對RDD內(nèi)部的元素進行排序。join根據(jù)“鍵”對兩個RDD進行連接。數(shù)據(jù)操作分析(2)行動操作:RDD的行動操作則是向驅(qū)動器程序返回結果或者把結果寫入外部系統(tǒng)的操作,會觸發(fā)實際的計算方法名稱作用count返回RDD中元素的個數(shù)。take返回RDD中前n個元素值。first返回RDD中第一個元素值。collect返回RDD中所有元素的列表。top返回RDD中排名前n的元素值。數(shù)據(jù)操作分析2、統(tǒng)計部門人員人數(shù)。count()行動操作,返回的是RDD內(nèi)元素的個數(shù)。舉例:利用序列Seq(1,2,3,4,5,6)創(chuàng)建的rdd中有6個數(shù)字元素操作練習:統(tǒng)計部門人員人數(shù)數(shù)據(jù)操作分析3、分別統(tǒng)計上/下半年業(yè)績排名,取前三位及最后三位利用map、flatmap、sortby、take,first、collect等方法對數(shù)據(jù)進行操作實現(xiàn)。(1)map轉換操作map轉換操作是最常用的轉換算子,對RDD中的每個元素都執(zhí)行一個指定的函數(shù)來產(chǎn)生一個新的RDD。舉例:數(shù)據(jù)操作分析(2)flatmap轉換操作

此方法首先將map函數(shù)應用于RDD的所有元素,然后將返回的結果平坦化。舉例:對map轉換操作中的str1進行flatmap轉換操作。

對比map和flatMap操作的輸出結果圖,可以很容易的看出兩者的區(qū)別,因此flatMap操作通常用來切分單詞。數(shù)據(jù)操作分析(3)sortby轉換操作此方法是對RDD進行排序,有3個參數(shù)可以輸入。 sortby(參數(shù)一,參數(shù)二,參數(shù)三)參數(shù)一是要進行排序的對象值;參數(shù)二是排序方式,默認是正序排序,使用false參數(shù)就是倒序排序;參數(shù)三是分區(qū)個數(shù)。數(shù)據(jù)操作分析//加載一個RDD,命名為testvaltest=sc.parallelize(Array(("dog",3),("cat",1),("monkey",2),("pig",3),("bird",2)))//根據(jù)test中的第二位元素進行降序排序valtest_desc=test.sortBy(_._2,false)//查看結果test_desc.collect//根據(jù)test中的第二位元素進行升序排序valtest_asc=test.sortBy(_._2)//查看結果test_asc.collectsortby舉例:數(shù)據(jù)操作分析(4)take,first、collect行動操作take行動操作返回RDD的前n個元素值。first行動操作返回的是RDD中的第一個元素值。collect行動操作是以數(shù)組的形式將RDD中所有的元素返回。數(shù)據(jù)操作分析(5)進行分析,實現(xiàn)任務。1)按照前面的問題分析思路,首先對上半年和下半年的業(yè)績數(shù)據(jù)集firstrdd、secondrdd進行map轉換,將每行數(shù)據(jù)分割為4列。2)利用sortBy方法對map_firstrdd和map_secondrdd數(shù)據(jù)集中的業(yè)績列分別進行降序和升序排序,取出排名前三和后三的信息。對上半年業(yè)績列進行降序和升序排序: valsort_firstrdd=map_firstrdd.sortBy(x=>x._4,false) sort_firstrdd.take(3) valsort_firstrdd=map_firstrdd.sortBy(x=>x._4) sort_firstrdd.take(3)同理對下半年業(yè)績列進行降序和升序排序。數(shù)據(jù)操作分析4、統(tǒng)計上/下半年業(yè)績超過5000萬的人員。

要獲取這個問題的數(shù)據(jù),首先需要分別過濾出上下半年業(yè)績超過5000萬的人員。但是有些人員只有上半年或者下半年符合要求,有些人員是上下半年都符合要求,因此還需要對過濾出來的人員信息進行去重??梢岳胒ilter、distinct、union等方法對數(shù)據(jù)進行操作。(1)filter轉換操作此方法返回滿足指定過濾條件的元素,不滿足條件的元素被忽略。//讀取一個數(shù)字列表創(chuàng)建RDDvalrdd=sc.parallelize(List(1,3,6,2,8,8,5,6,7))//過濾出大于5的數(shù)字rdd.filter(x=>x>5).collect數(shù)據(jù)操作分析(2)distinct轉換操作

此方法是對RDD中的數(shù)據(jù)去重,把完全相同的元素去除。對前述filter轉換操作中的rdd數(shù)據(jù)進行操作。由輸出結果可見,原先列表中重復的數(shù)字6和8被去重了。數(shù)據(jù)操作分析(3)union轉換操作

此方法可以將兩個RDD進行合并,返回兩個RDD的并集,并且不去重。但是要求兩個RDD中每個元素中的值的個數(shù)及數(shù)據(jù)類型保持一致。//定義加載兩個RDD,命名為test1和test2valtest1=sc.parallelize(Array(("dog",3),("cat",1),("monkey",2)))valtest2=sc.parallelize(Array(("monkey",2),("pig",3),("bird",2)))//執(zhí)行union操作合并兩個RDDtest1.union(test2).collect數(shù)據(jù)操作分析(4)進行分析,實現(xiàn)任務。1)利用filter方法過濾出業(yè)績大于5000萬的人員,最終返回人員編號信息。2)利用union方法,將上述過濾后的數(shù)據(jù)集filter_firstrdd和filter_secondrdd進行合并,并通過distinct方法去除重復的人員編號信息。數(shù)據(jù)操作分析5、統(tǒng)計此部門當年的房屋銷售套數(shù)。

要獲取這個問題的數(shù)據(jù),只需取出數(shù)據(jù)表的第三列“房屋銷售套數(shù)”數(shù)據(jù),然后利用求和函數(shù)進行求和??梢岳肦DD的相關描述性統(tǒng)計函數(shù)實現(xiàn)。(1)min()、max()函數(shù)min()方法返回RDD中的最小值,max()方法返回RDD中的最大值。數(shù)據(jù)操作分析(2)mean()、sum()函數(shù)mean()函數(shù)返回RDD中的平均值。sum()函數(shù)返回RDD中的總和。舉例:求RDD數(shù)據(jù)集的平均值和總和。數(shù)據(jù)操作分析(3)variance()、stdev()函數(shù)variance()計算RDD中所有元素的總體方差。stdev()計算RDD的標準差。舉例:求RDD數(shù)據(jù)集的總體方差和樣本方差。數(shù)據(jù)操作分析(4)進行分析,實現(xiàn)任務。

將經(jīng)過map操作處理好的上/下半年業(yè)績數(shù)據(jù)集map_firstrdd和map_secondrdd進行合并,取出第三列數(shù)據(jù),利用sum函數(shù)計算總數(shù)。數(shù)據(jù)操作分析6、查看全年總業(yè)績最高人員。

此任務需要將每個人上、下半年的業(yè)績進行相加,然后取最高者。這個過程需要對人員編號相同的業(yè)績數(shù)據(jù)進行識別并相加。在RDD中可以通過鍵值對(Key-Value)的操作完成。Spark為包含鍵值對類型的RDD提供了一些專有的操作,這些RDD被稱為Pair

RDD。數(shù)據(jù)操作分析(1)創(chuàng)建PairRDD

創(chuàng)建PairRDD的方法有很多,當需要將一個普通RDD轉換為PairRDD時,可以使用map方法來實現(xiàn)。//定義一個RDDvalrdd=sc.parallelize(List("dog","cat","monkey","pig"))//創(chuàng)建鍵值對valpairrdd=rdd.map(word=>(word,1))(2)keys()、values()轉換操作keys()、values()操作返回的類型是RDD。//取pairrdd中的鍵pairrdd.keys.collect//取pairrdd中的值pairrdd.values.collect數(shù)據(jù)操作分析(3)reducebykey()轉換操作

此方法應用于鍵值對數(shù)據(jù)集操作,對Key相同的Value使用指定的函數(shù)進行聚合操作,返回一個鍵值對的數(shù)據(jù)集。reduceByKey((x,y)=>x+y),對PairRDD中鍵相同的值進行相加操作。數(shù)據(jù)操作分析(4)groupbykey()轉換操作

此方法會對相同鍵的值進行分組,形成二元元組,第一個字段為相同的鍵,第二個字段為具備相同鍵的值的集合。對前一個任務中的map_test數(shù)據(jù)集進行操作。 valgroup_test=map_test.groupByKey() group_test.collect數(shù)據(jù)操作分析(5)sortByKey()轉換操作此方法返回一個根據(jù)“鍵”進行排序的RDD。舉例:數(shù)據(jù)操作分析(6)進行分析,實現(xiàn)任務1)將上、下半年的的業(yè)績合并到同一個RDD中。valtotal=map_firstrdd.union(map_secondrdd)2)將數(shù)據(jù)轉換成(員工編號,業(yè)績)鍵值對,利用reduceByKey方法對相同員工編號對應的業(yè)績值進行相加。數(shù)據(jù)操作分析3)對業(yè)績總和進行排序,獲得最高業(yè)績?nèi)藛T信息。//利用sortBy方法對指定列進行排序 yeji.sortBy(x=>x._2,false) yeji.sortBy(x=>x._2,false).take(1)數(shù)據(jù)操作分析7、存儲以上統(tǒng)計分析信息

數(shù)據(jù)存儲的方式有多種,比如將數(shù)據(jù)存儲為JSON文件、CSV文件、文本文件等。文本文件的存儲可以直接調(diào)用saveAsTextFile(path)進行存儲。

對上、下半年的業(yè)績以及全年總業(yè)績數(shù)據(jù)進行join連接,再將結果數(shù)據(jù)以文本文件的形式存儲到HDFS中。操作練習:某城市近年房產(chǎn)銷售狀況分析第二部分數(shù)據(jù)準備數(shù)據(jù)探索與分析情境導入

房子是一個價格昂貴的“商品”,但也是每個人生活必不可少的一件“商品”。房子的價格、所處的位置、裝修情況等等因素都是購房者關心的主要問題。了解房產(chǎn)市場的變化規(guī)律以及各個因素對價格的影響,對于消費者來說是購房之前首先要做的功課。

現(xiàn)有一份來自某網(wǎng)站的某城市近年房產(chǎn)銷售數(shù)據(jù)集house-price.csv,包含成交時間、價格、裝修情況、區(qū)域等信息。學習目標和要求

能靈活綜合的應用各種RDD操作和各個算子對數(shù)據(jù)進行分析,解決以下問題: 1、每年房產(chǎn)銷售量趨勢如何? 2、此城市各區(qū)域房產(chǎn)銷量如何?均價如何? 3、在2018年1月1日的銷量有多少? 4、查詢2018年1月1日到1月31日之間,滿五年房產(chǎn)的銷售比例。 5、哪種裝修類型的房子銷量最高? 6、所售賣的房子中,電梯有無的比例,地鐵有無情況?數(shù)據(jù)準備

此房產(chǎn)銷售數(shù)據(jù)集是一個在系統(tǒng)外部的csv文件,因此需要將其上傳至文件系統(tǒng)中,加載為RDD后再做處理分析。1、利用MobaXterm工具,將house-price.csv文件上傳到本地Linux的/root/data/Chapter4文件夾內(nèi)。2、啟動Hadoop和Spark集群,將/root/data/Chapter4目錄下的house-price.csv文件上傳到HDFS文件系統(tǒng)的/Chapter4目錄中。3、啟動spark-shell,加載數(shù)據(jù)到RDD。數(shù)據(jù)探索與分析

在進行數(shù)據(jù)探索分析之前,還需要將前面加載到RDD中的數(shù)據(jù)進行轉換,把每一條數(shù)據(jù)根據(jù)字段含義進行分割,以便后續(xù)數(shù)據(jù)處理分析。1、使用map方法轉換RDD,以“,”將每一行數(shù)據(jù)分割。數(shù)據(jù)探索與分析2、對戶人數(shù)的基本情況進行統(tǒng)計,獲得記錄條目的總數(shù),以及在這些記錄中包括多少個用戶ID。//查看數(shù)據(jù)總條數(shù)m_houseprice.count//查看這些記錄中的用戶數(shù)m_houseprice.map(_(1)).distinct.count數(shù)據(jù)探索與分析3、了解房產(chǎn)銷量趨勢,統(tǒng)計每年房產(chǎn)銷售量情況。

要獲得每年的房產(chǎn)銷售量情況,需要先從日期中提取年份數(shù)據(jù);然后利用reduceByKey方法按年進行統(tǒng)計匯總;最后利用sortBy方法對統(tǒng)計匯總的數(shù)據(jù)進行排序,獲得每年銷量從高到低的排序情況。數(shù)據(jù)探索與分析4、分析此數(shù)據(jù)集中購買房屋所屬的區(qū)域是哪些?各個區(qū)域的房產(chǎn)銷售情況如何?各個區(qū)域的房屋均價是多少?(1)購買房屋所屬的區(qū)域情況及數(shù)量

使用distinct方法去重就能獲得購買房屋所屬的各“區(qū)域”的情況。對于各個區(qū)域的銷售量,可以使用reduceByKey方法,對相同鍵(區(qū)域)的值進行相加獲得。(2)各個區(qū)域的房屋均價情況1)使用map取出“區(qū)域”、“區(qū)域均價”兩列數(shù)據(jù),將“區(qū)域均價”轉換位Double類型數(shù)據(jù),并對每個價格計數(shù)1,計數(shù)1的目的是為了之后統(tǒng)計Key的個數(shù)。2)對相同區(qū)域的“均價”值進行相加操作,再求平均。數(shù)據(jù)探索與分析5、查詢2018年1月1日的日銷量有多少。查詢某一天或某一條件下的數(shù)據(jù),可以使用filter轉換操作。6、查詢2018年1月1日到1月31日之間,滿五年房產(chǎn)的銷售數(shù)量。使用filter操作,可以圈定某一條件范圍。數(shù)據(jù)探索與分析7、數(shù)據(jù)集中,房子的裝修類型有精裝、簡裝、毛坯、其他,四種類型,分析哪種裝修類型的房子銷量高。

此問題的分析思路與第4點統(tǒng)計區(qū)域房產(chǎn)銷售情況一致,可以使用reduceByKey(_+_)方法對裝修類型相同的房屋數(shù)量進行求和統(tǒng)計。8、了解在所售賣的房子中,電梯有無的比例,地鐵有無情況,這些條件對房屋售賣量的影響程度。

對電梯有無數(shù)據(jù)列創(chuàng)建鍵值對,其中“鍵”指有無電梯,每個“值”賦予“1”。然后使用groupByKey()方法對相同“鍵”的鍵值對進行分類,分類后對“值”進行sum求和。有無地鐵情況的數(shù)據(jù)處理思路相同。小結

本章介紹了Spark中彈性分布式數(shù)據(jù)集RDD的創(chuàng)建方法、利用RDD的各個算子對數(shù)據(jù)進行操作分析的方法。通過“房產(chǎn)大數(shù)據(jù)分析與探索”和“某城市近年房產(chǎn)銷售狀況分析”兩個案例,靈活綜合的應用各種RDD操作和各個算子對數(shù)據(jù)進行分析處理。THANKS!第5章電商大數(shù)據(jù)分析與探索女裝電子商務評論情況分析第一部分數(shù)據(jù)準備數(shù)據(jù)轉換數(shù)據(jù)分析數(shù)據(jù)輸出數(shù)據(jù)清洗情境導入

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

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

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

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

(2)通過caseclass+toDF創(chuàng)建DataFrame數(shù)據(jù)準備2、使用createDataFrame函數(shù)創(chuàng)建DataFrame數(shù)據(jù)準備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文件,使用類型推斷創(chuàng)建DataFrame2)讀取CSV文件,自定義schema創(chuàng)建DataFrame。數(shù)據(jù)準備4、讀取“女裝電子商務評論”數(shù)據(jù)集(1)啟動Hadoop集群和Spark集群(2)將“Clothing-Reviews.csv”女裝電子商務評論數(shù)據(jù)集上傳到HDFS文件系統(tǒng)的/Chapter5/目錄下。(3)讀取CSV文件,使用自定義schema方式轉換為DataFrame。數(shù)據(jù)清洗

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

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

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

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

此方法用于將DataFrame中所有缺失值填充為一個給定的字符串或數(shù)值。可以為所有缺失值指定字符串或數(shù)值,也可以為指定列指定不同字符串或數(shù)值。將表中所有的null空數(shù)據(jù)指定為“不明”:數(shù)據(jù)清洗對不同的列中缺失值填充不同的字符串:5、對“Clothing-Reviews.csv”女裝電子商務評論數(shù)據(jù)集進行數(shù)據(jù)清洗,刪除重復的數(shù)據(jù),對有空缺數(shù)據(jù)的行進行刪除。數(shù)據(jù)轉換

數(shù)據(jù)轉換是將數(shù)據(jù)從一種格式或結構轉換為另一種格式或結構的過程。數(shù)據(jù)轉換對于數(shù)據(jù)集成和數(shù)據(jù)管理等活動至關重要。數(shù)據(jù)轉換可以包括一系列活動:可以轉換數(shù)據(jù)類型,豐富數(shù)據(jù)或執(zhí)行聚合,具體取決于項目的需要。1、withColumn(colName,col)

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

此方法用于對已經(jīng)存在的列名進行重命名。existing為原來的名字,

溫馨提示

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

評論

0/150

提交評論