29scala公開課-大數(shù)據(jù)_第1頁
29scala公開課-大數(shù)據(jù)_第2頁
29scala公開課-大數(shù)據(jù)_第3頁
29scala公開課-大數(shù)據(jù)_第4頁
29scala公開課-大數(shù)據(jù)_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

大數(shù)據(jù)公開課-Scala基礎(chǔ)講師:滿一航大數(shù)據(jù)交流群:375774867什么是Scala 作者MartinOdersky一門可伸縮的語言與Java無縫結(jié)合簡單有趣面向?qū)ο蠛瘮?shù)式函數(shù)即對象編程環(huán)境scalashelleclipseintellijidea一門可伸縮的語言即可作為腳本語言也可以作為企業(yè)應(yīng)用例如腳本hello.sh內(nèi)容如下:可以執(zhí)行:與java無縫結(jié)合scala代碼最終被編譯為class(java字節(jié)碼),加載至java虛擬機運行也就是說,scala的類可以被java所使用,反之亦然研究scala時,可以利用一些反編譯工具,查看scala編譯器生成的字節(jié)碼語法基礎(chǔ)變量vara=10常量valb=100表達式1+100if(a>0)"ok"else"notok"語法基礎(chǔ)方法定義def方法名(參數(shù):類型):返回類型={表達式;表達式}例如:注意:如果只有一個表達式,那么{}可以省略方法中最后一個表達式作為該方法的返回值定義函數(shù)時,如果根據(jù)表達式能夠確定返回值類型,那么不需要聲明它基本語法常用類型String消除轉(zhuǎn)義StringContextInt,Long,Double...Range,TupleList,Set,Mapscala喜歡省略(1)對象方法沒有參數(shù)時scala喜歡省略(2)對象方法僅有一個參數(shù)時比如之前見過的Range類型1是Int類型有to方法,接收10這個參數(shù),返回一個類型為Range的對象隨意的方法名可以使用!,++,?等有趣的字符作為方法名例:List的方法::::++:這里有一個約定,最后一個字符是【:】的方法是右結(jié)合的,即:List(1,2):::List(3,4)=List(3,4).:::(List(1,2))=List(1,2,3,4)1+:List(2,3)=List(2,3).+:(1)=List(1,2,3)面向?qū)ο蟊萰ava更簡單caseclass的背后(1)caseclass的背后(2)已經(jīng)實現(xiàn)了很多方法...caseclass適用場景可以用于模式匹配trait應(yīng)該說java8里的接口,模仿了scala中的traittrait中不僅可以定義抽象方法,也可以定義方法實現(xiàn):trait注意:scala中要重寫方法,需要顯式使用override關(guān)鍵字traittrait實現(xiàn)多繼承的原理:scala喜歡在編譯期做手腳traitPerson的方法內(nèi),實際調(diào)用的是抽象類中的靜態(tài)方法實現(xiàn)函數(shù)是一等公民Scala中的匿名函數(shù):(參數(shù):類型)=>{表達式;表達式}函數(shù)在Scala中最后會被解析為一個對象,這就意味著,它可以作為參數(shù)或是返回值其他接收函數(shù)作為參數(shù)的方法,或是將函數(shù)作為返回值的方法,稱之為高階函數(shù)(HigherOrderFunctions)函數(shù)怎么變成對象的下面這個匿名函數(shù)其實是一個對象varfunc0=(x:Int)=>println("ok")它會被翻譯成:objectfunc0extendsFunction1[Int,Unit]{defapply(x:Int)=println("ok,"+x);}調(diào)用func0實際就是調(diào)用了func0對象的apply方法func0(1)其實就是func0.apply(1)只是【.apply】被省略了高階函數(shù)先來看看高階函數(shù)的威力:已存在一個數(shù)字集合,按照奇偶數(shù)分成兩個集合,下面是java的實現(xiàn)高階函數(shù)再看Scala實現(xiàn):partition就是Scala集合中提供的高階函數(shù),像這樣的高階函數(shù),還有很多幾個重要的高階函數(shù)map(f:A=>B)將集合中的元素由A類型轉(zhuǎn)換為B類型reduce(op:(A,A)=>A):A將op函數(shù)的運算結(jié)果與下一個元素進行運算,假設(shè)元素有a,b,c,dop(a,b)op(op(a,b),c)op(op(op(a,b),c),d)groupBy(f:A=>K)將元素按照f函數(shù)返回結(jié)果進行分組幾個重要的高階函數(shù)filter(f:A=>Boolean)將集合中的元素按f函數(shù)過濾,f返回為真時保留flatMap(f:A=>GenTraversableOnce[B])將集合中的每個元素轉(zhuǎn)換為一個seq,最后連接所有的seq至一個大集合一個經(jīng)典的例子單機版的wordcount一個經(jīng)典的例子單機版的wordcount現(xiàn)在來體會函數(shù)式編程的一個重要思想程序應(yīng)當被分解為多個小的函數(shù),每個函數(shù)來處理一個特定任務(wù)Scala的學(xué)習(xí)資料《快學(xué)Scala》《ProgramminginScala》提問時間大數(shù)據(jù)公開課-Scala應(yīng)用講師:滿一航Scala技術(shù)棧面向web應(yīng)用面向分布式應(yīng)用面向大數(shù)據(jù)應(yīng)用測試Web框架Web框架分布式框架大數(shù)據(jù)框架測試框架我們重點來看看并發(fā)和分布式的Scala知識并發(fā)基礎(chǔ)不可變性WordCount變?yōu)椴l(fā)Actor模型WordCount變?yōu)榉植际讲l(fā)基礎(chǔ)future學(xué)過java的同學(xué)都很了解Executor和Future對象了但讓我們來比較一下scala中來完成一件長時間運算的代碼:為什么說函數(shù)式編程中不可變(immutable)是重要的讓wordCount變成并發(fā)回憶之前的wordCount程序,如果希望讓它變?yōu)椴l(fā)版本,只需要:分析一下reduce操作單線程分析一下reduce操作并行集合只是看起來很好但在實際應(yīng)用中,單機的處理能力有限,因為cpu核數(shù)的限制,在線程達到某一數(shù)目時,并不能進一步提高并行率從單機走向分布式分布式編程相對而言比較復(fù)雜底層涉及到socket通信、對象序列化、遠程調(diào)用等多種技術(shù)scala中有Akka框架幫我們處理這些底層技術(shù),可以讓程序員專注于分布式的業(yè)務(wù)邏輯什么是ActorActor:將通信抽象為消息發(fā)送和接收Actor的特點輕量復(fù)用線程使用Actor帶構(gòu)造參數(shù)的ActorActor發(fā)送消息的兩種模式第一種,前面helloWorld例子使用的模式稱為Tell(Fire-forgot)

它是首選的消息發(fā)送模式,因為不需要阻塞等待回應(yīng)消息,具有最好的并發(fā)性能第二中,稱為Ask(Send-And-Receive-Future)

不同之處在于它不僅將消息發(fā)送出去,還需要等待對方的應(yīng)答。由于使用了Future接口,發(fā)送消息并不會被阻塞Ask模式必須在兩個Actor之間進行Ask示例Ask示例(續(xù))

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論