好程式設計師大資料培訓分享spark之Scala
好程式設計師 大資料 培訓 分享spark之Scala,基本語法: 變數 , 變數的定義:不可變:val a = 2 或者 val a : Int = 2 (指定了資料型別) lazy val a : Int =2
可變:var a = 2 或者 var a : Int = 2(指定了資料型別)
def a = 2
定義變數不能1.以數字以及特殊符號(_除外)開頭 2.以關鍵字(var、val、class等)開頭
def定義的是??
var 編譯後有set 與 get 方☐法 所以可以重新賦值
val 編譯後只有get方法 所以不能再賦值了
lazy 惰性變數,只在該變數被呼叫的時候才例項化,而且後面只能跟val
def 與val 差不多 不能重新賦值 更多修飾方法
Scala變數的型別:Any是scala的頂級型別,Any下有AnyVal(值型別)和AnyRef(引用型別)兩個子類
AnyVal : 它有9個型別,其中7個是指型別:Double Float Byte Int Short Long Char 和兩個非值型別:Unit Boolean
AnyRef : 是引用型別,它的子類有:List Option 或者自定義的並繼承它的class
所有的型別都需要首字母大寫
Scala會自動推斷型別
Scala資料型別可以從低到高轉換 Byte-Short-Int-Long-Float-Double
Char-Int-Long-Float-Double
注意:scala內沒有強轉
運算子
Scala裡沒有運算子的概念,所謂的運算子其實都是方法
數學運算:+ - * / : % .+ ( ) 注:x+y 與 x.+(y)等價
關係:< <= > >= ! != ==
位運算: | & ^
如果兩個不一樣型別的變數進行運算,最終結果的型別是大的那個型別
如果想要格式化輸出:var x =5 var y = 5
var n =x + y
print(s”x+y=$n”) 輸出結果 x+y=10
當然也可以在結果前面加字串”x+y”
條件表示式
這種打出來是空,因為else裡不是一個值,而是一個賦值語句
正常應該是 var res = if(sex == 1){“男”}else{“女”}
因為大括號裡只有一個‘表示式’,大括號可以省略
var res = if(sex == 1)“男”else“女”
for迴圈
for(i<- 1 to 10){println (i)} //列印1-10
for(i <- 1 until 10){println (i)} //列印1-9
val arr = Array(“java”,”scala”,”python”) //定義一個陣列
for(i<- arr){println (i)} //列印陣列內容
for(i <- 1 to 3 ;j <- 1 to 3 if(i != j)){println(i*10+j)} //相當於雙層for迴圈
val arr =for(i <- 1 until 10) yield (i) //把0-9迴圈出來後封裝進arr集合
val arr =for(i <- 1 until 10) yield (i*10)
val res2 = for(i <- arr if i%2 == 0) yield i*100 //過濾
val arrf = bf.filter(_ %2==0).map(_ *100) //過濾 _ 是全部資料的意思
在scala中不支援break語句,但在scala 2.8之後 可以利用Breaks方式來實現
方法
def m1(x : Int , y : Int ) : Int = {x + y} //三種宣告方式
def m2(x:Int , y:Int) {print(x+y)}
def m3(x:Int , y:Int){x+y}
解釋:m1是方法名 xy是int型的引數 括號外的int是返回值型別 x+y是方法
呼叫:m1 (3,4)
函式
val f1 = (x:Int , y:Int) => x+y //宣告
val f1 = (x:Int , y:Int) =>{
val sum = x+y
sum*100} //最後一句作為函式的返回值 函式沒有返回值型別
回車之後會看到
f1: (Int, Int) => Int = <function2>
這裡的function2中的2指的是引數的個數
呼叫:f1 (3,4) //與方法的呼叫一致
函式與方法的關係???
我們透過一個案例來探討:
首先建立一個方法:def func (yAge:Int,mAge:Int):String={
val a : Boolean = yAge >= mAge
val str : String = if(a) "哥哥" else "弟弟"
str
}
我們發現這個條件可以做成一個函式:val m = ( yAge:Int , mAge:Int ) = >{yAge >= mAge}
我們可以呼叫函式:def func1 (yAge:Int,mAge:Int):String={
val a : Boolean = m(yAge,mAge)
val str : String = if(a) "哥哥" else "弟弟"
}
我們也可以把函式當做一個引數傳入到方法中:
def func1(yAge:Int,mAge:Int,f:(Int,Int) =>Boolean):String={
var a= f(yAge,mAge) 或者var a :Boolean = f(yAge,mAge)
val res : String=if(a)"哥哥" else "弟弟"
res
}
呼叫: println(func1(18,20,m))
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2696067/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師大資料培訓分享Spark技術總結程式設計師大資料Spark
- 好程式設計師大資料學習路線分享spark之Scala程式設計師大資料Spark
- 好程式設計師大資料培訓分享Spark需要什麼基礎?程式設計師大資料Spark
- 好程式設計師大資料培訓分享MapReduce理解程式設計師大資料
- 好程式設計師大資料培訓分享HDFS讀流程程式設計師大資料
- 好程式設計師大資料培訓分享大資料還學嗎?程式設計師大資料
- 好程式設計師大資料培訓分享大資料的應用程式設計師大資料
- 好程式設計師大資料培訓分享mysql資料型別程式設計師大資料MySql資料型別
- 好程式設計師大資料培訓分享之Ambari和ClouderaManager對比程式設計師大資料Cloud
- 好程式設計師大資料培訓分享之hive儲存過程程式設計師大資料Hive儲存過程
- 好程式設計師大資料培訓分享之MySQL資料庫SQL簡介程式設計師大資料MySql資料庫
- 好程式設計師大資料培訓分享常見的Hadoop和Spark專案程式設計師大資料HadoopSpark
- 好程式設計師大資料培訓分享大資料面試寶典一程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典二程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典三程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典四程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典六程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料的影響一程式設計師大資料
- 好程式設計師大資料培訓分享大資料兩大核心技術程式設計師大資料
- 好程式設計師大資料培訓分享之hive常用內部函式程式設計師大資料Hive函式
- 好程式設計師大資料培訓分享之《MySQL資料庫》常用函式整理程式設計師大資料MySql資料庫函式
- 好程式設計師大資料教程分享Scala系列之閉包程式設計師大資料
- 好程式設計師大資料分享Scala系列之柯里化程式設計師大資料
- 好程式設計師大資料培訓分享大資料就業方向有哪些?程式設計師大資料就業
- 好程式設計師大資料培訓分享:Hadoop叢集同步程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享MySQL8.0新特性程式設計師大資料MySql
- 好程式設計師大資料培訓分享之hive常見自定義函式程式設計師大資料Hive函式
- 好程式設計師大資料培訓分享HBase Filter過濾器概述程式設計師大資料Filter過濾器
- 好程式設計師大資料培訓分享Hadoop入門進階程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享Hadoop的shuffle過程程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享如何區分Hive與HBase程式設計師大資料Hive
- 好程式設計師大資料培訓分享Hadoop分散式叢集程式設計師大資料Hadoop分散式
- 好程式設計師大資料培訓分享Hadoop怎樣處理資料?程式設計師大資料Hadoop
- 好程式設計師大資料學習路線分享Scala系列之物件程式設計師大資料物件
- 好程式設計師大資料教程Scala系列之類程式設計師大資料
- 好程式設計師大資料培訓分享MySQL資料庫儲存引擎簡介程式設計師大資料MySql資料庫儲存引擎
- 好程式設計師大資料培訓分享Hive基礎知識講解程式設計師大資料Hive
- 好程式設計師大資料培訓分享Hadoop技術優缺點程式設計師大資料Hadoop