大數據第9周
1.Scala開發環境搭建
- 目前具備全部功能的集成開發環境只有Idea。
- 下載解壓idea:tar -zxvf ideaIE-2019.3.3.tar.gz。
- 進入bin目錄,執行:./idea.sh。
- 選擇新建一個project。
- 接着按如下界面選擇。
- 進入如下界面。輸入Project name。
- JDK選擇我們hadoop系統使用的同一個軟件包:點擊JDK欄右側的“New”,在界面中選擇我們使用的jdk1.8文件夾,然後點擊“OK”。
- 點擊“Scala SDK”右側的 “Create”,如果在以下界面中有scala顯示,那麼檢查版本號是否與我們使用的(2.11.12)相同,如果相同,可以直接選擇,如果不同,點擊下方“Browse”。
- 選擇我們使用的Scala軟件包的文件夾,點擊下方“OK”。
- 項目建立後,點擊項目界面左側的“src”。因爲我們將在src下建立文件。
- 在主菜單點擊“New”,選擇“Scala Class”。
- 跳出如下界面,要在在界面中選擇“Object”,輸入名字後回車。不要選“Class”。Scale的順序是project,然後object,要有object纔可以運行,與java不同。
- 若要調字體大小等,點擊在“File”菜單裏的“Setting”,在“Editor”的“Font”下更改,如圖所示。
- 在界面中輸入一段程序,寫入main,選擇“main”會自動建立一個function。下入一段程序。鼠標光標點在程序上,點擊右鍵,選擇“Run”。
- 結果顯示如下圖:
2.SCALA語言簡介
2.1值和變量
- 值:val
變量:var
“值”類型聲明後不可以更改數值,而“變量”類型可以。
- 聲明時可以指定數值類型,也可以不指定,不指定時系統會自動判定。
- 指定類型方式:用冒號“:”:例如:val c:Float=5。
- 注意對大小寫敏感。聲明時如果不指定數據類型,則根據初始化的字面量,系統自動進行判斷,判斷的原則是:
- 數值類型在計算中可以進行自動轉換,如果計算的數值類型不同,將向高級的數值類型自動轉換,而不會向低級的數據類型進行轉換。
- 如果要手工轉換數據類型,使用toType方法。如果轉成Int型是toInt,轉成Float型是toFloat。
- Scala類型
- C和Java基本類是Object,而Scala是Any。它包括數值類型和引用類型。如下圖所示。
2.3 String類型
- String類型都是引用類型。
- 要在String中加入值或變量,更直接的一種方式是利用字符串內插。
- 字符串內插:在字符串中插入變量,顯示爲變量的值,用“$”。
3.Scala的表達式
3.1表達式的返回值
- Scala語言的表達式返回值不是用return語句,而是最後執行的那一句就是返回語句。
- 如圖在“{}”中的是一句表達式,最後執行的那一句“a”、“b”、“c”就是返回語句。這是Scala區別於其它語言的較大的不同點,其它語言一般都用“return”返回。
如果沒有“{}”那就說明不是一句表達式,每一句表達式都會有返回。變量“resA”只是用來存儲表達式的返回值。
3.2 if表達式
- Scala只有if,else,沒有其他語言常用的if,else if,else if,else格式。沒有“?”表達式語句,比如java中的System.exit(job.waitForCompletion(true) ? 0 : 1);。
3.3 匹配表達式
- 類似其他語言的case語句。
object testScala { def main(args: Array[String]): Unit = { val x=10; val y=20 val max=x>y match{ case true =>println(s"Received data is $x.");x case false =>println(s"Received data is $y.");y } println(s"The max is $max.") } }
- 通配模式匹配,用“other”或“_”。
object testScala2 { def main(args: Array[String]): Unit = { var message="OK" val status = message match { case "OK" => 200 case other => { println(s"Couldn't parse $other") -1 } } println(s"status is $status") message="hhh" val status2 = message match { case "OK" => 200 case other => { println(s"Couldn't parse $other") -1 } } println(s"status2 is $status2") } }
- 模式哨衛匹配。
- 第一個例子:
object testScala3 { def main(args: Array[String]): Unit = { val response:String="OK" val res=response match{ case s if s!=null =>println(s"Received s is $s.");s case s =>println(s"Other $s"); } println(s"The res is $res.") } }
- 第二個例子:
object testScala4 { def main(args: Array[String]): Unit = { val x:Int=12180 val y:Any=x val res=y match{ case x:String =>println(s"$x.");x case a:Float =>println(s"$a%.2f.");a case b:Double =>println(s"$b..2f.");b case c:Long =>println(s"${c}l.");c case d:Int =>println(s"${d}i.");d } println(s"The res is $res.") } }
3.4 循環(下次講)