chapter2-林子雨大數(shù)據(jù)處理技術(shù)spark第2章scala語(yǔ)言基礎(chǔ)2017年春季學(xué)期_第1頁(yè)
chapter2-林子雨大數(shù)據(jù)處理技術(shù)spark第2章scala語(yǔ)言基礎(chǔ)2017年春季學(xué)期_第2頁(yè)
chapter2-林子雨大數(shù)據(jù)處理技術(shù)spark第2章scala語(yǔ)言基礎(chǔ)2017年春季學(xué)期_第3頁(yè)
chapter2-林子雨大數(shù)據(jù)處理技術(shù)spark第2章scala語(yǔ)言基礎(chǔ)2017年春季學(xué)期_第4頁(yè)
chapter2-林子雨大數(shù)據(jù)處理技術(shù)spark第2章scala語(yǔ)言基礎(chǔ)2017年春季學(xué)期_第5頁(yè)
已閱讀5頁(yè),還剩137頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

/溫馨提示:編輯幻燈片母版,可以修改每頁(yè)P(yáng)PT的廈大校徽和底部文第2章/溫馨提示:編輯幻燈片母版,可以修改每頁(yè)P(yáng)PT的廈大校徽和底部文第2章Scala語(yǔ)言基(PPT版本號(hào):2017年春季學(xué)期:20172.1Scala2.1Scala2.2Scala2.3 象編程基2.4免 2.1Scala計(jì)2.1Scala計(jì)算機(jī)的緣編程范Scala簡(jiǎn).1 (AlonzoChurch)設(shè)計(jì)了“λ演算”,這2.1.1英國(guó)數(shù)學(xué)2.1.1英國(guó)數(shù)學(xué) ·圖靈采用了完全不同的設(shè)計(jì)思路,.1 (JohnVon 提出了在數(shù)字計(jì)算 .2 .2 2.1.3Scala2.1.3Scala 象的語(yǔ)2.1.4Scala2.1.4Scala所有的操作系統(tǒng)都可以運(yùn)行Scala程序,包括Window、Linux、UnixMac安裝安裝使用Scala第1個(gè)Scala程序 具體可以參照廈門大學(xué)數(shù)據(jù) 博客 安裝安裝OpenJDK安裝安裝 使用Scala使用Scala在 命令提示符界面中輸入“scala”命令后,會(huì)進(jìn)入scala命令行提示符狀態(tài)第1個(gè)第1個(gè)Scala程序 注意,上面命令中一定要加入"-classpath,否則會(huì)出現(xiàn)“Nosuchfileclasson 2.2Scala2.2Scala 象編程基.1 小技巧:如何在Scala 小技巧:如何在ScalaScala的數(shù)據(jù)類型包括:Scala的數(shù)據(jù)類型包括:Byte、Char、Short、、Long、Float、Double成員,比如,的全名是scala.。對(duì)于字符串,Scala用java.lang.String字面量字面量操作符:在操作符:在Scala中,可以使用加(+)、減、乘(*)、除(/)、余數(shù)(%)等操作符,而且,這些操作符就是方法。例如,53和(5).+(3)前者是后者的簡(jiǎn)寫形式,這里的+是方法名,是類中的一個(gè)方法。對(duì)于基本數(shù)據(jù)類型,除了以上提到的符外,對(duì)于基本數(shù)據(jù)類型,除了以上提到的符外,Scala每個(gè)基本類型都有一個(gè)對(duì)應(yīng)的富包裝類,例如有一個(gè) 型,然后再調(diào)用相應(yīng)的方法。例如:3max ?Range可以支持創(chuàng)建不同數(shù)據(jù)類型的數(shù)值序列,包括、 readFloat、readLong、readCharread f()函 f()都在對(duì)象Predef中定義,該對(duì)象默 如 想把文件保存到一個(gè)指定的目錄下,就需要給出文件路Scala不支持Scala不支持Java中的“受檢查異?!?checkedexception),importimportimporttryvalf=new文件操}catchcaseex:FileNotFoundException文件不存在時(shí)的操caseex:IOException發(fā)生I/O錯(cuò)誤時(shí)的操}finallyfile.close()確保關(guān)閉文}2.2.2if2.2.2ifforififwhilewhileforfor forforforfor for可以給每for可以給每 都添加一個(gè)“守衛(wèi)”,如下forforforfor集合的類型由中的集合類型確定for(變量表達(dá)式y(tǒng)ield語(yǔ)句塊2.2.3容器2.2.3容器集合迭代器元組容器容器 (Map)?Scala用了三個(gè)包來(lái)組織容器類,分別是scala.collection容器容器容器容器容器容器列表列表Scala的List定義在 var 列表列表val List= 與 List=List(1,2,3)等集合集合 varmySet=mySet+=如果 importvalmyMutableSet=myMutableSet+="Cloud (Map)是一系列鍵值對(duì)的容器。在一個(gè)中,鍵是和集合一樣,Scala scala.collection.mutable和scala.collection.immutable里。 iversity=Map("XMU"->"Xia "THU"->"TsinghuaUniversity","PKU"->"Peking 如果要獲 中的值,可以通過鍵來(lái)獲 也可以使用+= 或者,也可以只遍 中的k或者迭代器迭代器 迭代器迭代器scala>valxs=List(1,2,3,4,xs: ]=List(1,2,3,4,scala>valgit=xsgroupedgit:Iterator[List[ ]]=non-emptyiteratorscala>git.next()res3:List[ ]=List(1,2,3)scala>git.next()res4:List[ ]=List(4,5)scala>valsit=xssliding3sit:Iterator[List[ ]]=non-emptyiteratorscala>sit.next()res5:List[ ]=List(1,2,3)scala>sit.next()res6: ]=List(2,3,scala>res7: ]=List(3,4,數(shù)組數(shù)組數(shù)組數(shù)組valmyMatrix= ](3,4)//類型實(shí)際就是 valmyCube=Array.ofDim[String](3,2,4)//類型實(shí)際是 數(shù)組數(shù)組importscala.collection.mutable.ArrayBuffervalaMutableArr=ArrayBuffer(10,20,30)aMutableArr+=40aMutableArr.insert(2,aMutableArr-=var元組元組 個(gè)元素必須是相同類型,而元組可以包含不同類型的元2.3 2.3 類對(duì)繼特模式匹.下下 新建對(duì)象,并調(diào)用其中的方法在Linux 進(jìn)入scala 原因 都沒有被封裝在對(duì)象中,因此,無(wú)法編譯JVM$scalac$scalaclasspathMyCounter//MyCounter是包含main方法的對(duì)象名稱,這里不能使用文件 參數(shù) getter和settergetter和setter給類中的字段設(shè)置值以 getter和settergetter和setter “error:variablevalueinclassCountercannotbeac inCounter”這樣的錯(cuò)getter和settergetter和setter下面定義一個(gè)帶有輔助構(gòu)造器的類 (代碼續(xù)上一頁(yè)(代碼續(xù)上一頁(yè) .在 實(shí)際上就實(shí)現(xiàn)了Java中靜態(tài)(sic)員成了實(shí)例成員,object成員成了sic成員為了驗(yàn)證這一點(diǎn)為了驗(yàn)證這一點(diǎn) 可以一起測(cè)試一下那就是把 在在 命令提示符狀態(tài)下,輸入以下命令編譯并執(zhí)行 忽 為了運(yùn)行上述代碼 現(xiàn)在可以使用兩種不同的方法 apply方法和updateapply方法和update 用括號(hào)傳遞給變量(對(duì)象)一個(gè)或多個(gè)參數(shù)時(shí),Scalaapply方法和updateapply方法和update apply方法和updateapply方法和update方法,并且把“ZhangfeiandLiubei”作為返回值,賦值給group變量,因此,prln(group)語(yǔ)句會(huì)打印出“ZhangfeiandLiubei”。apply方法和updateapply方法和update下 apply方法和updateapply方法和update從上面代碼可以看出,當(dāng)執(zhí)行valaApplyTest()時(shí),會(huì)導(dǎo)致apply方法的又會(huì)導(dǎo)致調(diào)用伴生類的apply方法,如果愿意,就可以在伴生類的apply方apply方法和updateapply方法和update apply方法和updateapply方法和update.Scala與JavaScala與Java以汽車為例子,首以汽車為例子,首 創(chuàng)建一個(gè)抽象類,讓這個(gè)抽象類被其他類繼承但是,抽象字段必須 類型,比如:valcarBrand:String,就把 下面下面 在在 2.3.4特質(zhì)2.3.4特質(zhì)特質(zhì)的定義和類的定義非常相似,有區(qū)別的是,特質(zhì)定義使用關(guān)鍵字trait特質(zhì)的定義和類的定義非常相似,有區(qū)別的是,特質(zhì)定義使用關(guān)鍵字trait下面 2.3.5簡(jiǎn)單2.3.5簡(jiǎn)單匹類型模"守衛(wèi)(guard)"語(yǔ)for表達(dá)式中的模case類的匹Option類"守衛(wèi)(guard)""守衛(wèi)(guard)"forfor 之前舉過 為例子 創(chuàng)建 如下循環(huán)遍 的基本格式是casecaseOptionOption一般而言,對(duì)于每種語(yǔ)來(lái)說都會(huì)一個(gè)鍵字表示個(gè)對(duì)引用的是無(wú),Jaa中用的l。Scala融合了函數(shù)式程格因此,當(dāng)預(yù)計(jì)到變量或函數(shù)回值能不會(huì) 何值時(shí)候建議你使Option類型。 Option下Option下 給出一個(gè)實(shí)例OptionOption 指定的“NoSuchBook”,而不是顯示None。OptionOptionOption[T]類型,其中的T可以是Sting或或其他各種數(shù)據(jù)類型。 既然是一個(gè)集合 2.42.4函數(shù)式編程實(shí)例2.4.1函數(shù)2.4.1函數(shù)字面函數(shù)的類型和函數(shù)、Lamda表達(dá)式與閉占位符語(yǔ) 除了函數(shù)字面 會(huì)比較陌生以外,其他幾種字面量都很容易理解函數(shù)字面量可以體現(xiàn)函數(shù)式編程函數(shù)字面量可以體現(xiàn)函數(shù)式編程 理念 下面下面現(xiàn)在定義一個(gè)大家比較熟悉的傳統(tǒng)類型的函數(shù),定義的語(yǔ)法和之前介紹 一個(gè)變量時(shí) 采用的形式是照葫蘆畫瓢 不需要給每個(gè)函數(shù)命名,這時(shí)就可以使 函數(shù),如下 “=> 下 不會(huì)報(bào)錯(cuò),因?yàn)椋o出了myNumFunc的類型為“=> 以推斷出num類型為類型。 每個(gè)閉包都 閉包創(chuàng)建時(shí)活躍 失的參數(shù)類型。例如,假設(shè)你只是寫_+_: 失的參數(shù)類型。例如,假設(shè)你只是寫_+_: _+_將擴(kuò)展成帶兩個(gè)參數(shù)的函數(shù)字面量。這也是僅當(dāng)每個(gè)參數(shù)在函數(shù) .2filterreducefold循環(huán)遍循環(huán)遍 ,是經(jīng)常需要用到的操作,基本格式是 的遍map操作和flatMapmap操作和flatMapmapmap操作和flatMapmap操作和flatMapflatMapflatMap是map的一種擴(kuò)展。在flatMap中,會(huì)傳入一個(gè)函數(shù),該函數(shù)filterfilter首先創(chuàng)建一 iversity=Map("XMU"->"Xia niversity","THU"->"TsinghuaUniversity","PKU"->"PekingUniversity","XMUT"->"Xia niversityofTechnology") iversityOfXiamen=universityfilter{kv=>kv._2contains iversityOfP=universityfilter{kv=>kv._2startsWithreducereducereduceLeft(_+_)整個(gè)加法 reduceRight(_+_)表示從列表尾部開始, foldfold 2.4.3函數(shù)式編程實(shí)例2.4.3函數(shù)式編程實(shí)例 委員,中國(guó)計(jì)算機(jī)學(xué)會(huì)信息 數(shù)據(jù)創(chuàng)新百人”稱號(hào)。中國(guó)高校首個(gè)“數(shù)字教師”提出者和建設(shè)者,廈門大學(xué)數(shù) 主要建設(shè)者和骨干成員,2013年度廈門大學(xué)獎(jiǎng)教金獲得者。主要研 學(xué)報(bào)》《計(jì)算機(jī)學(xué)報(bào)》 主持的科研項(xiàng)目包括1 高?;究? 應(yīng)用示 市工作方案、市互聯(lián)網(wǎng)經(jīng)濟(jì)調(diào)研等課題。中國(guó)高校首個(gè)“數(shù)字教師”提出者和建設(shè)者 《大數(shù)據(jù)技術(shù)原理與 ,為教師教學(xué)和學(xué)生學(xué)習(xí)大 委員,中國(guó)計(jì)算機(jī)學(xué)會(huì)信息 數(shù)據(jù)創(chuàng)新百人”稱號(hào)。中國(guó)高校首個(gè)“數(shù)字教師”提出者和建設(shè)者,廈門大學(xué)數(shù) 主要建設(shè)者和骨干成員,2013年度廈門大學(xué)獎(jiǎng)教金獲得者。主要研 學(xué)報(bào)》《計(jì)算機(jī)學(xué)報(bào)》 主持的科研項(xiàng)目包括1 高?;究? 應(yīng)用示 市工作方案、市互聯(lián)網(wǎng)經(jīng)濟(jì)調(diào)研等課題。中國(guó)高校首個(gè)“數(shù)字教師”提出者和建設(shè)者 《大數(shù)據(jù)技術(shù)原理與 ,為教師教學(xué)和學(xué)生學(xué)習(xí)大 、浙江省中小 瀘州企業(yè)家、江蘇沛縣企業(yè)家等開展信息化培訓(xùn),累計(jì)培訓(xùn)人數(shù)達(dá)3000人

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論