導航:首頁 > 文件教程 > scala視頻教程百度雲

scala視頻教程百度雲

發布時間:2021-10-23 11:45:48

㈠ 如何學好Scala

Spark也是基於JVM,我們構築分布式系統,藉助JVM,而不一定是Java語言。 Spark和消息中間件KAFKA等都是用Scala編寫的,學好Scala是掌握Spark的關鍵。
Scala基礎語法入門實戰
首先,參照相關攻略,在Linux下分別下載安裝Java、Scala,然後配置Java和Scala環境變數。安裝完畢,在終端敲入scala即可進入Scala命令行,如下所示:

root@Master:~# scala
Welcome to Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_66).
Type in expressions to have them evaluated.
Type :help for more information.

簡單測試
scala> 1+2
res0: Int = 3

scala> 1.5*2
res1: Double = 3.0

scala> 3*res1
res2: Double = 9.0

//按Tab鍵,命令自動補全
scala> res2.to
toByte toChar toDouble toFloat toInt toLong toShort toString

變數
var聲明可變變數;val聲明不可變變數。
val聲明的不可變變數,不希望數據被改變,RDD內部的數據都是不可變,所以在Spark中一般都是使用val。

//下面聲明了一個不可變變數result,result的值不可改變。
scala> val result=2+10
result: Int = 12

//假若修改result的值,會提示出錯,如下:
scala> result=13
<console>:8: error: reassignment to val
result=13

//var聲明可變變數:
scala> var name="Spark"
name: String = Spark

scala> name="Scala" //可以修改變數name的值
name: String = Scala

scala> name //name的值現在為Scala
res4: String = Scala

//val聲明不可變變數
//age被聲明為Int類型的不可變變數
scala> val age: Int=0
age: Int = 0

//聲明為String類型
scala> val name:String=null
name: String = null

一行代碼聲明多個變數
scala> val age1,age2,age3=0
age1: Int = 0
age2: Int = 0
age3: Int = 0

基本數據類型的自動轉換操作
Scala自己可以完成基本數據類型的自動轉換操作。

//輸入整數10,按Tab鍵盤,可以看見它本身的很多方法:
scala> 10.to
toByte toChar toDouble toFloat toInt toLong toShort toString

scala> 10.toString
res5: String = 10

scala> 0.to(5)
res6: scala.collection.immutable.Range.Inclusive = Range(0, 1, 2, 3, 4, 5)
給了我們一個不可變的集合,獲得的結果是:0~5,所以Scala一切皆對象!

Scala隱私轉換:
當類型本身沒有沒有這個方法,但是又需要調用這個方法時,內部就會自動觸發隱式轉換。剛才的示例中,Int本身沒有to這樣的方法,Scala引擎內部會隱式自動轉換成RichInt,就像上面0.to(5)這樣的調用,RichInt對象類型才有to這樣的函數。

scala> 1+1
res7: Int = 2

//因為Scala一切皆對象,所以以上示例又可以寫成:
scala> 1.+(1)
res9: Double = 2.0
這個示例,內部其實就是Int的一個隱式轉換,+是類的一個方法。

Scala沒有++、---操作運算:
scala> var age=10
age: Int = 10

// Scala沒有++、---操作運算
scala> age++
<console>:9: error: value ++ is not a member of Int
age++
^

//但是++運算可以用下面方式實現:
scala> age +=1

scala> age
res12: Int = 11

求最大、最小值
scala> min(20,4)
<console>:8: error: not found: value min
min(20,4)
^
該示例因為沒有導入庫,所以出錯。

scala> import scala.math._ //導入math庫
import scala.math._

scala> min(20,4)
res14: Int = 4

apply工廠構造實現方法
在Spark中,大量的實例的構造都是使用了apply方式。

scala> Array(1,2,3,4)
res15: Array[Int] = Array(1, 2, 3, 4)

scala> val array=Array(1,2,3,4)
array: Array[Int] = Array(1, 2, 3, 4)

//array是一個聲明整數類型的數組變數, 其實內部是自動調用了Array.apply方法,等同如下:
scala> val array = Array.apply(1,2,3,4)
array: Array[Int] = Array(1, 2, 3, 4)

條件控制、循環
// if表達式示例:
scala> if(age>=18) "成年人" else "小孩"
res16: String = 成年人

scala> val result=if(age>=18) "成年人" else "小孩"
result: String = 成年人

scala> result
res17: String = 成年人

scala> val result = if(age>=18){
| "alt"
| buffered=10
| buffered
| }
以上一個代碼塊,代碼塊後面有個返回值buffered,代碼塊的返回值就是最後一行的值。

列印值
scala> println("Spark") //輸出一行字元串並換行
Spark

scala> println("\nSpark") //換行,輸出一行字元串再換行。\n是換行轉義符。

Spark

scala> print("Spark") //輸出一行字元串,不換行
Spark
scala>

填充佔位符
scala> printf("%s是大數據框架的未來", "Spark") //%s是佔位符
Spark是大數據框架的未來

讀取內容
readLine用於讀取輸入的內容
scala> readLine //此時敲入Scala之後,然後回車
res28: String = Scala

scala> res28
res29: String = Scala

補充說明,readLine是一個方法,如果方法如果沒有參數,那麼可以不帶括弧,readLine()跟readLine效果一樣。

循環

//聲明一個可變變數,初始值為100
scala> var element=100
element: Int = 100

//while循環示例:
scala> while(element>90){
| println(element)
| element -= 1
| }
100
99
98
97
96
95
94
93
92
91

scala> 0 to element
res32: scala.collection.immutable.Range.Inclusive = Range(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90)

//for循環遍歷並列印
scala> for(i<-80 to element) println(i)
80
81
82
83
84
85
86
87
88
89
90

//循環並增加條件判斷
scala> for(i<-0 to element if i%2==0) print(i+" ")
0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90

//for循環,並break退出
scala> import scala.util.control.Breaks._ //添加break引用
import scala.util.control.Breaks._

scala> for(i<-1 to 10){
| if(i==4) break
| println(i)
| }
1
2
3
scala.util.control.BreakControl

//循環,並return
scala> val n=5
n: Int = 5

scala> def f1:Any = {
| for(i <-1 to 10){
| if(i==n) return i
| println(i)
| }
| }
f1: Any

scala> f1
1
2
3
4
res1: Any = 5
解釋以上代碼塊,def是定義一個函數。f1就是一個函數。

二、 Scala函數入門實戰

函數示例
函數的定義使用def關鍵字,並且函數體最後有返回值。

//聲明了一個函數f3,兩個參數:param1是String類型,param2為Int類型。param2默認值為30,因為有了默認值,那麼在調用上可以不傳param2。
scala> def f3(param1:String, param2:Int=30) = param1 + param2
f3: (param1: String, param2: Int)String

//調用函數f3,傳入第一個參數param1值為Spark,沒有傳入第二個參數,默認為30。
scala> f3("Spark")
res4: String = Spark30

//帶名參數調用,即在函數調用時,顯示指定參數名,並不按順序傳入。
scala> f3(param2=100, param1="Scala")
res5: String = Scala100

//變長參數, 定義了一個sum函數,參數numbers是變成參數,即傳入的Int變數個數不定。在函數體中,對傳入的全部Int變數進行循環遍歷並累計求和,最後把結果返回。
scala> def sum(numbers: Int*)={var result=0; for(element<-numbers) result +=element; result}
sum: (numbers: Int*)Int

scala> sum(1,2,3,4,5,6,7,8,9,10)
res1: Int = 55

//下面示例是一個非常經典的語法
scala> sum(1 to 10: _*) // _* 表示提取裡面的每個元素, 然後作為變長參數傳遞
res3: Int = 55

過程
沒有返回值的函數就是過程。

//這是一個函數
scala> def morning(content:String) = "Good" + content
morning: (content: String)String

//這是一個過程
scala> def morning(content:String) { println( "Good" + content)}
morning: (content: String)Unit

㈡ 求一套spark,scala,hadoop視頻教程

http://blog.csdn.net/qq_28767763/article/details/58595081

㈢ 學習scala有哪些好的資源

為什麼學習函數式編程
在閱讀DDD巨著《Patterns, Principles, and Practices of Domain-Driven Design》的過程中,Scott在第5章提到了使用函數式編程語言配合貧血模型去實踐DDD的一種思路,這激發了我的無限遐想。
在開發領域,我們已經擁有了許多的抽象方法論和大量的實現技術。但我個人認為,這一切歸根結底,都是人類思維在開發領域的具體表達方式。而人類在認識和分析所要解決的業務領域問題時,思考的內容不外乎由兩個部分組成:『業務流程』與『業務規則』。前者,回答了業務活動中先做什麼後做什麼的問題;後者,則回答了遇到什麼情況時應該怎麼做的問題。兩者結合後,得到我們需要的業務結果,或者叫作「實現業務目標」。
再想想目前學習和掌握的面向對象的一系列方法,又是如何將上述思維結果映射到中去的呢?我認為是這樣的:
對於業務流程,我們將其表達為若干對象之間的合作,比如UML里序列圖的對象與消息,進而具化為具體的類及其職責,比如類及其若干業務方法。
對於業務規則,我們將其表達為若乾的判斷邏輯,比如UML流程圖里的判斷分支,進而具化為業務方法里的if-else語句,或者再復雜一點,表達為工廠、策略等設計模式的實際運用。
然後,我認為,對於復雜業務規則的梳理,可以象數學歸納法一樣進行演繹:假設一個函數y=f(x),給定x的定義域,確定y的值域。特別是在排列組合等方面的一些問題,也經常採用遞歸的方式來解決。所以,從這個角度講,函數式編程更貼近人類思維習慣,所以讓我自然而然地把目光轉向了它。
為什麼選擇Scala
在選擇具體的函數式編程語言時,我首先想到的是它最好是同時能支持面向對象編程的。因為即便LISP作為函數式編程語言的先祖,誕生已長達半個世紀,但單純的函數式編程語言與面向對象編程語言相比,在抽象領域概念、組合系統模塊、實現信息隱蔽等方面存在一定的差距,所以一直沒有成為開發的主流。
信息隱蔽原理:在西安電子科大蔡希堯與陳平老師於1993年合作出版的《面向對象技術》一書中是這樣描述的:把需求和求解的方法分離;把相關信息——數據結構和演算法,集中在一個模塊之中,和其他模塊隔離,它們不能隨便訪問這個模塊內部的信息。
其次,由於我的語言路線是從Pascal → C → C++ → C#,所以我希望能選擇一種風格近似於C、強類型的函數式編程語言。在比較了F#、R、ErLang等幾種常見的函數式編程語言之後,我最終選擇了Scala。
Scala有何優勢
註:以下內容,節選翻譯或參考自《Programming in Scala》第1章、第3章,《Programming Scala》第6章,不算完整意義上的個人心得。
函數式編程的優勢
純的函數是沒有副作用的。無論何時何地,對於一個函數y=f(x),給定x必定得到y,不會因此產生二義結果。因此無論對於代碼測試還是並發,由於給定輸入必定得到預期輸出,而不受其他因素干擾,所以能有效減少Bug產生。
在函數式編程里,大量使用immutable的值。這意味著函數運算的結果總會創建一個新的實例,避免了通常並發環境下為防止數據共享沖突而採取的保護機制。盡管這需要額外的Copy操作,但Scala針對性地提供了高效的Copy實現,以及延遲計算等彌補機制。
函數是一等公民。函數作為表達式的一部分,可以藉由函數之間的嵌套、組合,實現復雜的判斷邏輯。
Scala語言本身的優勢
Scala是面向對象與函數式編程的混合語言,所以能有效結合二者的優點。
Scala屬於Java生態圈,可以在JVM上與Java一起編譯運行,所以許多Java的框架、工具都可以直接應用於Scala語言編寫的項目。
Scala視一切數據類型皆為對象,且支持閉包、lambda、by-name參數等特性,語法簡潔明快。
Scala使用Actor作為並發模型,與Akka框架自然契合。這是一種區別於傳統的、基於數據共享、以鎖為主要機制的並發模型,其特點在於以Actor為基本單位、沒有數據共享、基於消息傳遞實現Actor之間的協作,因此可以有效避免死鎖、減少競爭。
最後,如果有朝一日要轉向大數據領域,有Spark這樣的大型框架作為支撐。知乎:與 Hadoop 對比,如何看待 Spark 技術?
Scala對實踐DDD有何意義
說了那麼多,我的根本目的還是要將Scala作為實現DDD的主要武器。那麼試想一下,Scala在我們實現DDD的過程中能有哪些幫助呢?我暫且胡侃亂謅如下:
表示值對象、領域事件等元素更直觀。值對象、領域事件在DDD里都應該是immutable的,以往多採取POCO形式表示,現在改用Scala里的val以及case class表示,在語法層面就直觀地表明是不可修改的。
在類的方法層面實現CQRS時有語法支持。用Scala里的Function(返回類型為非Unit)對應CQRS里uery,保證類的方法沒有副作用;用Procere(返回類型為Unit)對應CQRS里的Command,明確表明這一類方法會產生修改狀態等副作用。這同樣從語法層面就能對二者進行明確區分。
模式匹配豐富了函數操作。除了正則表達式,Scala形式多樣的模式匹配語法,為提取數據、完成數據分組聚合等運算、實現邏輯判斷提供了強大支持。比如定義def sum_count(ints:Seq[Int) = (ints.sum, ints.size)這樣一個函數後,我們可以這樣調用,以得到一個1至6的整數序列的整數值合計,及該序列的尺寸:val(sum, count) = sum_count(List(1, 2, 3, 4, 5, 6))。
為實現DSL提供有力支持。Scala自帶有解析框架,加上靈活的函數語法支持,要自己實現一套DSL及其相應的語法解析器將不再困難。比如在配置文件里這樣的一條配置語句,表示退休條件為年齡達到60周歲或者工齡屆滿30年:retire = (Age >= 60) || (ServiceLength >= 30)。以往的方式是自己寫一個語法解析器,把這條文本轉換成相應的Specification對象,然後扔給聚合去使用。現在有了Scala的幫助,就使編寫語法解析器這一環節的工作量大大減少。
合理的高階函數設計,使規則編寫得到簡化。比如規則、費用報銷規則,以往可能需要若干層的if-else嵌套,現在則將通過高階函數得到大幅簡化。對此,我強烈劉光聰先生的Refactoring to Functions,你會在劉先生的重構過程中發現高階函數的強大。
Actor為高效並發打下基礎。Actor
內部完全自治,自帶用於存儲消息的mailbox,與其他Actor只能通過消息進行交互,每個Actor都是並發的一個基本單位。這些特點,非常適合於
採取Event
Sourcing方式實現的DDD。每個聚合都好比一個Actor,在聚合內部始終保持數據的強一致性,而在聚合之間交互的領域事件則好比Actor之間
的消息,聚合之間藉由領域事件和Saga保證數據的最終一致性。
Trait成為AOP利器。Trait是Scala的另一大特色,它就象AOP織入一樣,能動態地給某個類型注入方法或者結構。比如配合類Circuit和with後面那4個Trait的定義,val circuit = new Circuit with Adders with Multiplexers with Flipflops with MultiCoreProcessors這樣就創建了一個帶有加法器、乘法器、觸發器和多核處理器的元件。
隱式實現為類型擴展提供支持。對應C#里的靜態擴展方法,Scala通過implicit為實現數據類型的方法擴展提供了便捷,成為Trait之外的另一個功能擴展手段。
能降低常見BDD框架的學習成本。盡管這一點可能比較牽強,但我正在努力摸索如何將BDD與DDD結合,而常見的Cucumber、Spock等一些BDD框架,其語法與Scala比較相近,所以我才有如此一說。
有哪些Scala學習資料
以下是我目前主要的學習資料,並衷心歡迎各位留言補充。
書籍
Programming in Scala:由Scala語言的設計師Martin Odersky編寫,循序漸進,配合了大量實例,入門必讀吧。
Programming Scala:視角與上面那本有點不一樣,沒有Scala語言基礎會感覺很困難,適合掌握了基本語法後溫故而知新。
在線文檔與
Scala 官方文檔:Scala的,作為尋找資料的出發點是不錯的。
Scala 課堂:中文版的Scala基本語法在線課堂。
Scala Synatax Primer:由Jim McBeath整理的Scala語法概要,可以當字典用。
The Neophyte』s Guide to Scala:很出名的一個Scala入門指南,以Scala中的提取器Extractor作為實例開始。
Scala 初學指南:這是上面那本指南的中譯本。
Effective Scala:中文版的Scala高效編程
SBT中文入門指南:Scala Build Tool
社區
Scala 中文社區:不算活躍,原因你懂的。
Scala User:Scala入門者聚集地,沒有Stack Overflow那麼嚴格,但也需要點爬牆的身手。
SDK及IDE
Java SE:先裝這個
Scala SDK:再裝這個
SBT:然後裝這個
IntelliJ IDEA:最後裝這個,就能比較方便地開始Scala編程了
寫在最後

近讀的書很多也很雜,DDD、BDD、Scala、Cucumber以及Java基礎等等都有涉及,真恨不得一口吃成個大胖子。由於時間和精力有限,所以
現在知識消化很成問題,遲遲沒有進入學以致用的環節,只能先這樣紙上談兵了,好歹先把自己在學習過程中的一些思考、看到的好東西先記載下來,以備將來之
需。

㈣ 初學scala,我希望大神解答

ClassObject.count 使得ClassObject.numcount 為2
new ClassObject().addNum 中類實例的num 為4,使得ClassObject.numcount 為4,addNum 返回 5
new ClassObject().numcount1 中類實例首先調用ClassObject.count,使得 ClassObject.numcount 為6,因此numcount1 為6
同上面的道理,再次new ClassObject().numcount1 ,為8

原理就是類構造函數會對類定義中的所有可運行部分執行,例如ClassObject類,每次構造都會調用:
private var num = ClassObject.count
var numcount1 = ClassObject.numcount
引發類伴生對象中numcount 的變化

㈤ 哪裡有Scala視頻教程下載

推薦學習搖擺少年夢老師的《國內首部系統性介紹Scala語言培訓課程》

㈥ scala代碼下載

你要學習scala,但是沒必要看源碼吧。
https://github.com/scala/scala 這里是官方源碼,你可以下載看
但是你要學習scala,可以看官方API,http://www.scala-lang.org/api/current/
或者是一些公開課
在coursera上面有scala的公開課,比較權威的https://www.coursera.org/course/progfun

㈦ 誰有scala的中文教程

可以到 scala中文社區http://www.cnscala.com/index.php 關注

㈧ 誰有scala視頻課程

個人覺得,目前最好的Scala視頻是「DT大數據夢工廠」的Scala視頻,他們每天都會發布至少一個精簡的視頻出來,跟著學習挺有收貨的。希望能幫到你,謝謝!

㈨ 求Scala視頻

王家林老師錄制了中國第一套Scala視頻,可以參考學習,同時王家林老師在Spark、Hadoop、Android等方面有豐富的源碼、實務和性能優化經驗。徹底研究了Spark從0.5.0到0.9.1共13個版本的Spark源碼,並已完成2014年5月31日發布的Spark1.0源碼研究。
他同時還是Hadoop源碼級專家,曾負責某知名公司的類Hadoop框架開發工作,專注於Hadoop一站式解決方案的提供,同時也是雲計算分布式大數據處理的最早實踐者之一;

閱讀全文

與scala視頻教程百度雲相關的資料

熱點內容
不用下載免費看的網站 瀏覽:954
成龍電影網 瀏覽:158
中文影院在線 瀏覽:108
可編程式控制制器控制什麼 瀏覽:320
iphone取消阻止來電後 瀏覽:590
asp接收form表單上傳文件 瀏覽:437
用手機共享電腦網路 瀏覽:696
電腦文件路徑前綴 瀏覽:811
游戲編程都需要學哪些軟體下載 瀏覽:357
組成合同文件內容 瀏覽:895
黑寡婦燈光配置文件 瀏覽:833
前戲電影 瀏覽:668
linuxwgetcurl 瀏覽:636
河東區愛琴海影院影訊 瀏覽:601
反映女中介和客戶的台灣電影 瀏覽:341
網路技術專業前景 瀏覽:108
韓國古裝電影 床戲 瀏覽:933
哈薩克電影全集免費 瀏覽:405
韓國電影比尿尿尿的遠 瀏覽:340
一部悲傷的電影用英語怎麼說 瀏覽:303

友情鏈接