Spark大數(shù)據(jù)分析與實(shí)戰(zhàn)(第二版) 項(xiàng)目2 教案_第1頁
Spark大數(shù)據(jù)分析與實(shí)戰(zhàn)(第二版) 項(xiàng)目2 教案_第2頁
Spark大數(shù)據(jù)分析與實(shí)戰(zhàn)(第二版) 項(xiàng)目2 教案_第3頁
Spark大數(shù)據(jù)分析與實(shí)戰(zhàn)(第二版) 項(xiàng)目2 教案_第4頁
Spark大數(shù)據(jù)分析與實(shí)戰(zhàn)(第二版) 項(xiàng)目2 教案_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

課程名稱Spark大數(shù)據(jù)分析選用教材Spark大數(shù)據(jù)分析與實(shí)戰(zhàn)(第2版)出版社西安電子科技大學(xué)出版社章節(jié)項(xiàng)目2編寫Scala程序處理新能源汽車銷售數(shù)據(jù)教學(xué)內(nèi)容在學(xué)習(xí)Scala語法基礎(chǔ)上,編寫Scala代碼完成新能源汽車銷售數(shù)據(jù)的處理。授課學(xué)時(shí)4授課班級(jí)****專業(yè)*****班授課日期授課地點(diǎn)教學(xué)目標(biāo)了解Ubuntu環(huán)境下的Scala安裝;熟悉Scala的基礎(chǔ)語法,能夠編寫簡(jiǎn)單的程序;熟悉分支、循環(huán)結(jié)構(gòu),掌握if、for、while的用法;掌握數(shù)組、列表、映射、集合等容器的常見用法;掌握函數(shù)的定義方法,能夠書寫簡(jiǎn)單的匿名函數(shù);了解面向?qū)ο蟮幕靖拍?,能夠自定義類;熟悉模式匹配,掌握樣例類的定義方法。重點(diǎn)難點(diǎn)Scala中的分支與循環(huán)結(jié)構(gòu);組合數(shù)據(jù)類型Array、List、Tuple、Set、Map的基本用法;匿名函數(shù)及高階函數(shù)的用法;模式匹配的使用。教學(xué)方法R講授£討論或座談£問題導(dǎo)向?qū)W習(xí)£分組合作學(xué)習(xí)£案例教學(xué)£任務(wù)驅(qū)動(dòng)R項(xiàng)目教學(xué)£情景教學(xué)£演示匯報(bào)£實(shí)踐教學(xué)£參觀訪問£引導(dǎo)文教學(xué)£其他(--)教學(xué)準(zhǔn)備(教師)教材:《Spark大數(shù)據(jù)分析與實(shí)戰(zhàn)(第2版)》硬件設(shè)備:內(nèi)存8G(或以上)的計(jì)算機(jī)(2)教學(xué)資源:課件PPT、教學(xué)日歷、相關(guān)軟件等教學(xué)準(zhǔn)備(學(xué)生)教材:《Spark大數(shù)據(jù)分析與實(shí)戰(zhàn)(第2版)》硬件設(shè)備:內(nèi)存8G(或以上)的計(jì)算機(jī)(3)教學(xué)資源:課件PPT、相關(guān)軟件等教學(xué)環(huán)節(jié)教學(xué)內(nèi)容與過程(教學(xué)內(nèi)容、教學(xué)方法、組織形式、教學(xué)手段)課前組織教師通過課程教學(xué)平臺(tái)或班級(jí)群發(fā)布學(xué)習(xí)預(yù)習(xí)任務(wù)及課程資源;學(xué)生提前預(yù)習(xí)相關(guān)內(nèi)容,并完成課前自測(cè)等。課程內(nèi)容描述任務(wù)2.1Scala的安裝與體驗(yàn)Spark本身就是用Scala編寫,因此Spark對(duì)Scala的支持最為高效,是生產(chǎn)環(huán)境下Spark大數(shù)據(jù)開發(fā)的主要語言。Scala是ScalableLanguage的簡(jiǎn)寫,它是一門多范式的編程語言;Scala于2001年由瑞士洛桑聯(lián)邦理工學(xué)院洛桑(EPFL)編程方法實(shí)驗(yàn)室研發(fā),設(shè)計(jì)的初衷便是集成面向?qū)ο缶幊毯秃瘮?shù)式編程的特性。因此,Scala是一種純粹的面向?qū)ο笳Z言,秉承每個(gè)值都是對(duì)象的理念;同時(shí)Scala也是一門函數(shù)式的編程語言,其函數(shù)也可以當(dāng)做值來使用。特點(diǎn):面向?qū)ο?、函?shù)式、靜態(tài)類型、可擴(kuò)展安裝過程簡(jiǎn)單,使用如下命令即可:tar-zxvfscala-2.12.17.tgz-C/usr/local#解壓到/usr/local目錄下安裝完畢后,把scala命令所在的目錄“/usr/local/scala/bin”增加到path中;在Ubuntu終端,輸入“scala”命令,即可進(jìn)入Scala簡(jiǎn)易開發(fā)環(huán)境。文本編輯器(gedit等)書寫HelloWorld.scala;使用命令編譯、執(zhí)行scalacHelloWorld.scalascala-classpath.HelloWorld任務(wù)2.2分析某電動(dòng)汽車的市場(chǎng)地位1.數(shù)據(jù)類型與變量現(xiàn)實(shí)生活中,我們使用的數(shù)據(jù)形態(tài)多樣,囊括整數(shù)、小數(shù)、文本(文字符號(hào))等;在程序設(shè)計(jì)中,也需要對(duì)數(shù)據(jù)的類型加以區(qū)分,從而完成不同的操作(例如數(shù)值可以進(jìn)行四則運(yùn)算,文本可以表示一個(gè)人的名字等)。程序設(shè)計(jì)中為了方便獲取某個(gè)內(nèi)存單元中的數(shù)據(jù),會(huì)使用“標(biāo)識(shí)符”來表示這個(gè)內(nèi)存單元,該“標(biāo)識(shí)符”即稱為變量。Scala程序中,使用val關(guān)鍵字來定義的變量,又稱為常量;程序運(yùn)行過程中,常量一旦確定好其值后,不允許改變(重新賦值)。變量就是程序運(yùn)行過程中可以改變(重新賦值)的量,變量使用關(guān)鍵字var來定義。運(yùn)算符運(yùn)算符:告訴Scala執(zhí)行什么樣的命令。在數(shù)學(xué)領(lǐng)域,我們可以執(zhí)行加減乘除等運(yùn)算;在Scala編程中,也提供了算術(shù)、關(guān)系、賦值、邏輯等運(yùn)算。每一種運(yùn)算,都使用一個(gè)獨(dú)特的符號(hào)來表示,用于告訴Scala編譯器需要執(zhí)行什么樣的計(jì)算邏輯。If分支結(jié)構(gòu)在實(shí)際業(yè)務(wù)中,經(jīng)常需要對(duì)數(shù)據(jù)進(jìn)行差異化處理(不同值、類型采取不同的處理方法),或者根據(jù)不同條件執(zhí)行不同功能代碼,這時(shí)候可以使用if判斷語句;Scala中if條件語句用法與Java等基本一致。函數(shù)函數(shù)是組織好的、可重復(fù)使用的、用來實(shí)現(xiàn)特定功能的代碼段,它可以有效提升代碼的重復(fù)利用率,用以構(gòu)建更加復(fù)雜、更強(qiáng)大的程序。所謂匿名函數(shù)就是沒有名字的函數(shù)(有的編程語言稱為lambda表達(dá)式),即定義函數(shù)時(shí)省略函數(shù)名稱;匿名函數(shù)使用“=>”來定義,等號(hào)左邊為匿名函數(shù)參數(shù)列表,箭頭右邊為函數(shù)主體(所要實(shí)現(xiàn)的功能);(參數(shù)1:類型,參數(shù)2:類型,)=>{函數(shù)體語句}scala>(basic:Float,bonus:Float)=>{valtotal=basic+bonus;total}scala>(basic:Float,bonus:Float)=>basic+bonus//簡(jiǎn)化版,與上一行等價(jià)任務(wù)2.3統(tǒng)計(jì)某品牌的銷售數(shù)量1.數(shù)組數(shù)組是程序設(shè)計(jì)中一個(gè)重要的數(shù)據(jù)結(jié)構(gòu),類似于一個(gè)容器,可以存儲(chǔ)若干同類型的數(shù)據(jù)(數(shù)組中的數(shù)據(jù)亦稱為元素);Scala中數(shù)組Array的書寫形式如下:vararrayName:Array[T]=newArray[T](Num)對(duì)于數(shù)組而言,可以使用下標(biāo)訪問其中的某個(gè)元素或者給某元素賦值(與Java、C語言類似,Scala中數(shù)組的下標(biāo)也是從0開始的),也可以在聲明數(shù)組的時(shí)候直接給數(shù)組元素賦值。scala>varnums:Array[Int]=newArray[Int](3)//數(shù)組nums存儲(chǔ)3個(gè)Int類型的數(shù)據(jù),默認(rèn)值均為0varnums:Array[Int]=Array(0,0,0)scala>nums(0)=10//修改數(shù)組nums的第1個(gè)元素(下標(biāo)為0的元素)值為10scala>nums(1)=20//修改數(shù)組nums的第2個(gè)元素(下標(biāo)為1的元素)值為20scala>nums(2)=30//修改數(shù)組nums的第3個(gè)元素(下標(biāo)為2的元素)值為30scala>varcars:Array[String]=Array("BYD","XiaoMi","LiXiang")//定義數(shù)組,同時(shí)為其元素賦值varcars:Array[String]=Array(BYD,XiaoMi,LiXiang)scala>println("第一輛汽車:"+cars(0))//打印輸出數(shù)組cars的第1個(gè)元素(下標(biāo)為零的元素)第一輛汽車:BYD循環(huán)結(jié)構(gòu)程序中,也可能需要多次執(zhí)行同一行語句或者塊代碼,這是就用到循環(huán)結(jié)構(gòu)。幾乎所有的程序設(shè)計(jì)語言都有循環(huán),Scala中的循環(huán)包括for循環(huán)、while循環(huán);其中for循環(huán)的語法結(jié)構(gòu)如下:for(變量<-容器){循環(huán)體語句}“變量<-容器”表示針對(duì)某個(gè)容器(數(shù)組就是一種典型的容器),逐個(gè)讀取容器中的元素,然后賦值給某個(gè)臨時(shí)變量,進(jìn)而執(zhí)行循環(huán)體語句;for循環(huán)執(zhí)行流程如圖2-11所示for循環(huán)有循環(huán)次數(shù)限定,而while循環(huán)則沒有循環(huán)次數(shù)限定;while循環(huán)預(yù)設(shè)一個(gè)循環(huán)條件,只要該條件成立(結(jié)果為true),則重復(fù)執(zhí)行循環(huán)體內(nèi)的代碼塊(循環(huán)體內(nèi)的語句);while循環(huán)的語法格式如下:while(循環(huán)條件){循環(huán)體語句}while循環(huán)的邏輯如圖2-12所示。字符串的處理Scala直接使用了Java的字符串類,其用法與Java字符串一致。Scala中字符串使用雙引號(hào)包裹,提供了豐富的方法幫助實(shí)現(xiàn)相關(guān)功能。序號(hào)方法功能說明1length()返回字符串的長(zhǎng)度(包含的字符數(shù))2equals()判斷兩個(gè)字符串是否相等3startsWith()/endsWith()判斷字符串是否以指定的字符串開頭/結(jié)尾4replace()將字符串中指定的字符串替換成指定的字符串;5contains()判斷字符串中是否包含指定的字符串6substring(start,end)字符串截取,從指定的下標(biāo)索引開始和結(jié)束,范圍是左閉右開7split()字符串切割,按照指定的字符串對(duì)原字符串進(jìn)行切割,得到一個(gè)字符串?dāng)?shù)組8trim()不改變?cè)凶址畠?nèi)容,只是去除字符串首尾的空白字符,包括空格、\t、\r、\n文件的操作Scala提供了Source類及伴生對(duì)象來讀取文件(關(guān)于類、伴生對(duì)象的概念將在任務(wù)2.5中介紹)。scala>valdata=Source.fromFile("/home/hadoop/data/test.txt")//讀取文件,返回一個(gè)迭代器(類似于數(shù)組)scala>vallines=data.getLines()//文件的每一行成為迭代器lines的一個(gè)元素任務(wù)2.4計(jì)算某熱銷車型的月均銷售量元組Tuple元組Tuple是大數(shù)據(jù)處理中常用的數(shù)據(jù)類型,它可以包含不同類型的數(shù)據(jù)元素;元組使用小括號(hào)將這些數(shù)據(jù)元素包裹起來,數(shù)據(jù)元素之間用逗號(hào)分隔。代碼newTupleN(元素1,元素2,...)可以創(chuàng)建元組,其中N為元組中元素的數(shù)量,N不能超過22;也可以直接簡(jiǎn)寫為(元素1,元素2,...)。列表List列表List類似于數(shù)組,存儲(chǔ)的元素通常為相同數(shù)據(jù)類型;但列表List是不可變的,List列表一旦生成,其元素不可改變scala>valcars:List[String]=List("BYD","LiXiang","HUWEI")scala>valcars=List("BYD","LiXiang","HUWEI")//簡(jiǎn)化形式,與上一行等效集合SetSet集合是沒有重復(fù)的對(duì)象集合,且元素間沒有順序。scala>valfruits=Set("apple","orange","grape","blueberry")//創(chuàng)建Setscala>fruits.contains("orange")//判斷Set中是否包含orangescala>fruits.take(3)//獲取Set的前3個(gè)元素,返回一個(gè)新Set映射MapMap映射是一種可迭代的鍵值對(duì)(key/value)結(jié)構(gòu);Map中鍵Key是唯一的,所有的值Value都可以通過鍵Key來獲取。Map中所有的鍵與值構(gòu)成一種對(duì)應(yīng)關(guān)系,這種對(duì)應(yīng)關(guān)系即為映射。scala>valstudent=Map("Tom"->18,"Jerry"->20,"Petter"->19)scala>valstudent=Map(("Tom",18),("Jerry",20),("Petter",19))scala>student("Jerry")//獲取Jerry對(duì)應(yīng)的Value值,20高階函數(shù)高階函數(shù)(Higher-OrderFunction)就是操作其他函數(shù)的函數(shù);如果一個(gè)函數(shù)使用另外一個(gè)函數(shù)作為參數(shù),或者返回另外一個(gè)函數(shù)作為結(jié)果,那么這個(gè)函數(shù)就可以稱為高階函數(shù)。scala>defadd(a:Int,b:Int):Int=a+b//定義一個(gè)函數(shù),計(jì)算兩整數(shù)的和scala>defmultiply(a:Int,b:Int):Int=a*b//定義一個(gè)函數(shù),計(jì)算兩整數(shù)的積scala>defcal(f:(Int,Int)=>Int,a:Int,b:Int)=f(a,b)//,第1個(gè)參數(shù)為某函數(shù)scala>cal(add,10,20)//調(diào)用cal函數(shù),第1個(gè)參數(shù)為add函數(shù)valres30:Int=30任務(wù)2.5計(jì)算各大品牌的市場(chǎng)占有率類與繼承在Scala中,使用class關(guān)鍵字創(chuàng)建一個(gè)類,語法格式如下:class類名(參數(shù)1:參數(shù)類型,參數(shù)1:參數(shù)類型,...){成員變量成員方法}class是定義類的關(guān)鍵字,表明需要?jiǎng)?chuàng)建一個(gè)類;類名稱后面可以加若干個(gè)參數(shù)(也可以沒有參數(shù)),稱之為類參數(shù)。類的主體部分為若干成員變量和成員方法,成員變量可以理解為描述類的屬性(數(shù)據(jù)),成員方法代表類所具有的功能。繼承與特質(zhì)繼承是面向?qū)ο蟮囊粋€(gè)重要概念,當(dāng)一個(gè)類繼承另外一個(gè)類時(shí),將自動(dòng)獲取另一個(gè)類的公有屬性和方法。原有的類稱為父類,而新的類稱為子類。子類除了擁有父類的所有的屬性及方法外,也可以擁有自己獨(dú)特的屬性與方法,還可以把父類中不合適的方法覆蓋重寫,從而展現(xiàn)更強(qiáng)大的功能。Scala使用extends關(guān)鍵字來表示繼承關(guān)系,其語法格式如下:class子類(參數(shù)1,參數(shù)2,參數(shù)3,...)extends父類(參數(shù)1,參數(shù)2,...){子類的主體}模式匹配與樣例類(1)模式匹配ifelse條件語句可以根據(jù)不同的條件執(zhí)行不同的代碼,實(shí)現(xiàn)不同的功能;但當(dāng)分支較多時(shí),書寫帶來不夠方便,處理的靈活度也不高。為此,Scala提供了功能強(qiáng)大的模式匹配,可以實(shí)現(xiàn)條件判斷、類型檢查、“解構(gòu)”等多種功能。一個(gè)模式匹配包含了一系列備選項(xiàng),每個(gè)都開始于關(guān)鍵字case。每個(gè)備選項(xiàng)都包含了一個(gè)模式及一到多個(gè)表達(dá)式。箭頭符號(hào)=>隔開了模式和表達(dá)式。(2)樣例類在Scala中,使用了case關(guān)鍵字的類定義就是就是樣例類(caseclasses),樣例類是種特殊的類,經(jīng)過優(yōu)化以用于模式匹配。樣例類沒

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論