大數(shù)據(jù)分析及應(yīng)用項目教程(Spark SQL)(微課版) 課件 第3章 學(xué)生信息處理分析_第1頁
大數(shù)據(jù)分析及應(yīng)用項目教程(Spark SQL)(微課版) 課件 第3章 學(xué)生信息處理分析_第2頁
大數(shù)據(jù)分析及應(yīng)用項目教程(Spark SQL)(微課版) 課件 第3章 學(xué)生信息處理分析_第3頁
大數(shù)據(jù)分析及應(yīng)用項目教程(Spark SQL)(微課版) 課件 第3章 學(xué)生信息處理分析_第4頁
大數(shù)據(jù)分析及應(yīng)用項目教程(Spark SQL)(微課版) 課件 第3章 學(xué)生信息處理分析_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章學(xué)生信息處理分析班級基本情況分析第一部分學(xué)生所屬班級和男女生數(shù)量以班級為單位整理學(xué)生信息情境導(dǎo)入

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

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

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

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

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

在Scala語言中,提供了一種數(shù)據(jù)結(jié)構(gòu)叫作數(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ù)組的相同,但是需要先導(dǎo)入importscala.collection.mutable.ArrayBuffer依賴包。定長數(shù)組:學(xué)生所屬班級和男女生數(shù)量——理論基礎(chǔ)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ù)組各元素由小到大排序結(jié)果arr.reverse.toBuffer對于Int數(shù)據(jù)類型的數(shù)組,返回數(shù)組各元素倒序arr.contains(x)判斷數(shù)組中是否包含x元素arr.isEmpty判斷數(shù)組是否為空學(xué)生所屬班級和男女生數(shù)量——理論基礎(chǔ)5、判斷與循環(huán)Scala的判斷與循環(huán)語法與其他計算機語言一樣。if判斷可以對數(shù)據(jù)進行過濾判斷處理,while和for循環(huán)可以在某一條件下將某段代碼進行重復(fù)執(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)。學(xué)生所屬班級和男女生數(shù)量——理論基礎(chǔ)6、函數(shù)式編程1)函數(shù)的定義和調(diào)用def函數(shù)名[參數(shù)列表]:[返回值類型]={

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

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

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

函數(shù)編程中,接受多個參數(shù)的函數(shù)都可以轉(zhuǎn)化為接受單個參數(shù)的函數(shù),這個轉(zhuǎn)化過程就是柯里化。柯里化本身也用到了閉包。//未柯里化方式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é)生所屬班級和男女生數(shù)量——理論基礎(chǔ)6)嵌套函數(shù)嵌套函數(shù)即在函數(shù)內(nèi)部定義函數(shù),其中內(nèi)部函數(shù)稱為局部函數(shù)。學(xué)生所屬班級和男女生數(shù)量——編程分析實現(xiàn)1、判斷學(xué)生所屬班級

完成此任務(wù)首先需要用數(shù)組存儲各個班級學(xué)生的學(xué)號,然后定義函數(shù)識別某個學(xué)生的學(xué)號獲取其所屬班級。1)定義班級數(shù)組2)定義distinguish函數(shù),利用if…elseif…else語句進行判斷識別學(xué)號。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ù)。以班級為單位整理學(xué)生信息——理論基礎(chǔ)1、列表Scala列表與數(shù)組類似,所有元素的類型都相同。它們的區(qū)別首先是列表是不可變的,其次列表具有遞歸的結(jié)構(gòu)而數(shù)組不是。1)定義列表定義不可變列表語法://創(chuàng)建一個包含值1,值2,值3,值...的不可變列表var/val變量名:List[元素類型]=List[元素類型](值1,值2,值3,值...)//使用“::”拼接方式來創(chuàng)建列表,必須在最后添加一個Nilval/var變量名=值1::值2::Nil以班級為單位整理學(xué)生信息——理論基礎(chǔ)//導(dǎo)入相關(guān)依賴包importscala.collection.mutable.ListBuffer//創(chuàng)建一個空的可變列表val/var變量名:ListBuffer[類型]=newListBuffer[類型]()//創(chuàng)建一個包含值1,值2,值3...的可變列表val/var變量名=ListBuffer(值1,值2,值3...)定義可變列表語法:以班級為單位整理學(xué)生信息——理論基礎(chǔ)2)列表的常用操作以下是可變和不可變列表的常用操作。方法(對列表a和b進行操作)描述a.isEmpty判斷列表是否為空a++b拼接兩個列表a.head獲取列表的首個元素a.tail獲取列表除首個元素以外的剩余部分a.reverse反轉(zhuǎn)列表a.take(num)獲取指定個數(shù)的前綴a.drop(num)刪除從左邊開始的num個元素a.toString轉(zhuǎn)換字符串a(chǎn).toArray將列表轉(zhuǎn)換為數(shù)組List.concat(a,b)合并兩個列表ersect(b)對兩個列表取交集a.diff(b)對兩個列表取差集a(索引值)獲取列表中指定索引值的元素以班級為單位整理學(xué)生信息——理論基礎(chǔ)可變列表的常用操作方法(對列表a和b進行操作)描述a+=元素為列表添加元素a++=b追加一個列表a-=元素刪除列表中的元素a.toList將可變列表轉(zhuǎn)換為不可變列表

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

val

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

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

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

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

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

以班級為單位整理學(xué)生信息,可以先將數(shù)據(jù)保存到列表中,然后使用groupBy組合器以班級為條件進行分組。1)在scala命令輸入行輸入以下命令,創(chuàng)建列表保存數(shù)據(jù)。valdata=List("21103,嚴(yán)林石,男,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")以班級為單位整理學(xué)生信息——編程分析實現(xiàn)2)接著應(yīng)用groupBy組合器進行分組,分組條件是班級。因此需要選取班級列進行操作,使用“,”對列表中每條數(shù)據(jù)進行split分隔,班級數(shù)據(jù)是在第4列。由此實現(xiàn)了以班級為單位整理學(xué)生信息。學(xué)生基本情況獲取第二部分學(xué)生特長情況學(xué)生成績情況分析情境導(dǎo)入

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

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

繼承是面向?qū)ο箝_發(fā)語言中的一個概念,繼承可以使得子類具有父類的屬性和方法或者重新定義、追加屬性和方法等。可以使得子類別具有父類別的各種屬性和方法,而不需要再次編寫相同的代碼,可以有效復(fù)用代碼。但是Scala是單繼承,只能繼承一個父類。繼承類需要用到關(guān)鍵字extends。學(xué)生

溫馨提示

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

最新文檔

評論

0/150

提交評論