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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

函數(shù)編程中,接受多個(gè)參數(shù)的函數(shù)都可以轉(zhuǎn)化為接受單個(gè)參數(shù)的函數(shù),這個(gè)轉(zhuǎn)化過(guò)程就是柯里化??吕锘旧硪灿玫搅碎]包。//未柯里化方式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))學(xué)生所屬班級(jí)和男女生數(shù)量——理論基礎(chǔ)6)嵌套函數(shù)嵌套函數(shù)即在函數(shù)內(nèi)部定義函數(shù),其中內(nèi)部函數(shù)稱為局部函數(shù)。學(xué)生所屬班級(jí)和男女生數(shù)量——編程分析實(shí)現(xiàn)1、判斷學(xué)生所屬班級(jí)

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

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

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

val

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

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

當(dāng)需要訪問(wèn)元組中的某個(gè)元素的值時(shí),可以通過(guò)“元組名_元素索引”進(jìn)行訪問(wèn)。4、Map映射以班級(jí)為單位整理學(xué)生信息——理論基礎(chǔ)1)映射定義:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

要獲取這個(gè)問(wèn)題的數(shù)據(jù),只需取出數(shù)據(jù)表的第三列“房屋銷售套數(shù)”數(shù)據(jù),然后利用求和函數(shù)進(jìn)行求和。可以利用RDD的相關(guān)描述性統(tǒng)計(jì)函數(shù)實(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()計(jì)算RDD中所有元素的總體方差。stdev()計(jì)算RDD的標(biāo)準(zhǔn)差。舉例:求RDD數(shù)據(jù)集的總體方差和樣本方差。數(shù)據(jù)操作分析(4)進(jìn)行分析,實(shí)現(xiàn)任務(wù)。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

本章介紹了Spark中彈性分布式數(shù)據(jù)集RDD的創(chuàng)建方法、利用RDD的各個(gè)算子對(duì)數(shù)據(jù)進(jìn)行操作分析的方法。通過(guò)“房產(chǎn)大數(shù)據(jù)分析與探索”和“某城市近年房產(chǎn)銷售狀況分析”兩個(gè)案例,靈活綜合的應(yīng)用各種RDD操作和各個(gè)算子對(duì)數(shù)據(jù)進(jìn)行分析處理。THANKS!第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ì)于線上商店,客戶對(duì)商品的評(píng)論情況對(duì)商品的銷量、商店的經(jīng)營(yíng)發(fā)展起到了重要的作用?,F(xiàn)有某女裝線上商店的一份圍繞客戶評(píng)論的女裝電子商務(wù)數(shù)據(jù)集Clothing-Reviews.csv?,F(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服裝分類學(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ù)集,類似于傳統(tǒng)數(shù)據(jù)庫(kù)中的二維表格,是SparkSQL最核心的編程抽象。DataFrame與RDD的主要區(qū)別在于,前者帶有schema元信息,即DataFrame所表示的二維表數(shù)據(jù)集的每一列都帶有名稱和類型。這使得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文件,使用類型推斷創(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ù)類型,豐富數(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)的名字,

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論