天天看點

大資料技術之_16_Scala學習_01_Scala 語言概述

​​第一章 Scala 語言概述​​​​1.1 why is Scala 語言?​​​​1.2 Scala 語言誕生小故事​​​​1.3 Scala 和 Java 以及 jvm 的關系分析圖​​​​1.4 Scala 語言的特點​​​​1.5 Windows 下搭建 Scala 開發環境​​​​1.6 Linux 下搭建 Scala 開發環境​​​​1.7 Scala 的開發工具​​​​1.7.1 IDEA介紹​​​​1.7.2 Scala 插件安裝​​​​1.8 Scala 的開發快速入門​​​​1.8.1 windows 下開發步驟​​​​1.8.2 linux 下開發步驟​​​​1.8.3 IDEA 下開發步驟​​​​1.8.4 使用 java 寫一段模拟代碼,來模拟 scala 的執行流程​​​​1.8.5 Scala 執行流程分析​​​​1.8.6 Scala 程式開發注意事項(重點)​​​​1.9 Scala 語言轉義字元​​​​1.10 Scala 語言輸出的三種方式​​​​1.11 Scala 源碼的檢視的關聯​​​​1.12 注釋​​​​1.12.1 介紹​​​​1.12.2 Scala 中的注釋類型​​​​1.12.3 文檔注釋案例​​​​1.12.4 scala 的代碼規範說明​​​​1.12.5 正确的注釋和注釋風格​​​​1.12.6 正确的縮進和空白​​​​1.12.7 Scala 官方程式設計指南​​​​1.13 本章知識回顧​​

第一章 Scala 語言概述

1.1 why is Scala 語言?

1、Spark--新一代​

​記憶體級​

​大資料計算架構,是大資料的重要内容。

2、Spark 就是使用 Scala 編寫的。是以為了更好的學習 Spark, 需要掌握 Scala 這門語言。

3、Scala 是 Scalable Language 的簡寫,是一門多範式(範式=程式設計方式[面向對象/函數式程式設計])的程式設計語言。

4、聯邦理工學院洛桑(EPFL)的 Martin Odersky(馬丁·奧德斯基) 于 2001 年開始設計 Scala(斯卡拉)。

5、Spark 的興起,帶動 Scala 語言的發展!

1.2 Scala 語言誕生小故事

  創始人馬丁·奧德斯基 (Martin Odersky) 是編譯器及程式設計的狂熱愛好者,長時間的程式設計之後,希望發明一種語言,能夠讓寫程式這樣的基礎工作變得高效、簡單。是以當接觸到 JAVA 語言後,對 JAVA 這門便攜式、運作在網絡、且存在垃圾回收的語言産生了極大的興趣,是以決定将函數式程式設計語言的特點融合到 JAVA 中,由此發明了兩種語言(Pizza & Scala)。 (大量使用遞歸)

  jdk5.0 的泛型、for 循環增強,、自動類型轉換等,都是從 Pizza 引入的新特性。

  jdk8.0 的類型推斷、Lambda 表達式 就是從 scala 引入的特性。

  Pizza 和 Scala 極大地推動了 Java 程式設計語言的發展。[如何了解?]

  且現在主流 JVM 的 javac 編譯器就是 馬丁·奧德斯基 編寫出來的。并被 JAVA 程式設計人員廣泛的使用,是以 Scala 語言起源于 Java,卻推動着 Java 的發展,它們是相輔相成的。Jdk5.0、Jdk8.0 的編譯器就是 馬丁·奧德斯基 寫的,是以 馬丁·奧德斯基 是一個人的戰鬥力抵得上一個 Java 開發團隊。

  

大資料技術之_16_Scala學習_01_Scala 語言概述
  正是基于上面的原因,是以 Scala 源代碼 (.scala) 會被編譯成 Java 位元組碼 (.class),然後運作于 JVM 之上,并可以調用現有的 Java 類庫,實作兩種語言的無縫對接,是以,對于已經掌握 JAVA 語言的我們來講,學習起來一定會略顯輕松。  Scala 是一門以 java 虛拟機(JVM) 為目标運作環境并将​

​面向對象​

​和​

​函數式程式設計​

​的最佳特性結合在一起的​

​靜态類型程式設計語言​

​。(運作之前一定知道類型是什麼)

1.3 Scala 和 Java 以及 jvm 的關系分析圖

  一般來說,學 Scala 的人,都會 Java,而 Scala 是基于 Java 的,是以我們需要将 Scala 和 Java 以及 JVM 之間的關系搞清楚,否則學習 Scala 你會蒙圈。

  建議:如果沒有任何 Java 基礎的同學,先學 Java,至少要學習 JavaSE,再學習 Scala。

  我們分析一下:Scala 和 Java 以及 jvm 的關系 (重要!!!)

大資料技術之_16_Scala學習_01_Scala 語言概述

1.4 Scala 語言的特點

  Scala 是一門以 java 虛拟機(JVM) 為運作環境并将​

​面向對象​

​函數式程式設計​

​靜态類型程式設計語言(編譯型語言)​

​。(動态類型語言:javascript、python、php 解釋型語言)

  Scala 是一門多範式 (multi-paradigm) 的程式設計語言,Scala 支援面向對象和函數式程式設計。

  Scala 源代碼 (.scala) 會被編譯成 Java 位元組碼 (.class),然後運作于 JVM 之上,​

​并可以調用現有的 Java 類庫,實作兩種語言的無縫對接​

​。[案例示範]

  scala 單作為一門語言來看,非常的簡潔高效。[對 三元運算,++,-- 等進行簡化]

  Scala 在設計時,馬丁·奧德斯基 是參考了 Java 的設計思想,可以說 Scala 是源于 java,同時 馬丁·奧德斯基 也加入了自己的思想,将函數式程式設計語言的特點融合到 JAVA 中, 是以,對于學習過 Java 的同學,隻要在學習 Scala 的過程中,搞清楚 Scala 和 java 相同點和不同點,就可以快速的掌握 Scala 這門語言。

  快速有效掌握 Scala 的建議 [1、學習 scala 特有的文法。2、搞清楚 scala 和 java 差別。 3、如何規範的使用 scala。]

1.5 Windows 下搭建 Scala 開發環境

安裝&配置

  1、Scala 需要 Java 運作時庫,安裝 Scala 需要首先安裝 JVM 虛拟機并配置好,推薦安裝 JDK1.8。

  2、在 http://www.scala-lang.org/ 下載下傳 Scala2.11.8 程式安裝包

  3、配置 Jdk 的環境變量

  4、配置 SCALA_HOME,​

​SCALA_HOME= D:\program\scala-2.11.8​

  5、将 Scala 安裝目錄下的 bin 目錄加入到 PATH 環境變量,在 PATH 變量中添加:​

​%SCALA_HOME%\bin​

  6、在終端中輸入 “scala” 指令打開 scala 解釋器

1、

2、

大資料技術之_16_Scala學習_01_Scala 語言概述

3、

1.6 Linux 下搭建 Scala 開發環境

  在實際開發中,我們的項目是部署到 linux 上,是以,我們需要在 Linux 下搭建 scala 的環境。Linux 下安裝 Scala 的原理機制一樣,操作的具體步驟:

1、下載下傳對應的 scala 的安裝軟體 scala-2.11.8.tgz

2、通過遠端登入工具,将安裝軟體上傳到對應的 Linux 系統(xshell6 和 xftp6)

3、mkdir /opt/module/scala 建立目錄

4、解壓:​

​$ tar -zvxf /opt/software/scala-2.11.8.tgz -C /opt/module/scala/​

5、配置環境變量 vim /etc/profile

在該檔案中配置 scala 的 bin 目錄 /opt/module/scala/scala-2.11.8/bin

#SCALA_HOMEexport SCALA_HOME=/opt/module/scala/scala-2.11.8export PATH=$PATH:$SCALA_HOME/bin      

6、使配置檔案生效 source /etc/profile

7、測試,指令:scala

大資料技術之_16_Scala學習_01_Scala 語言概述

Scala 的 REPL:

  上面打開的 scala 指令行視窗,我們稱之為 REPL,是指:Read Evaluation Print Loop,也稱之為互動式解釋器。類似于 MySQL 的預設用戶端工具。在指令行視窗中輸入 scala 指令代碼時,解釋器會讀取指令代碼并計算(Evaluation)對應的值,然後将結果列印(Print)出來,接着循環等待使用者輸入指令(Loop)。

  從技術上講,這裡其實并不是一個解釋器,而是指令代碼被快速的編譯成 Java 位元組碼并被 JVM 加載執行。最終将執行結果輸出到指令行中。

1.7 Scala 的開發工具

1.7.1 IDEA介紹

  IDEA 全稱 IntelliJ IDEA,是用于 java 語言開發的內建環境(也可用于其他語言),IntelliJ 在業界被公認為最好的 java 開發工具之一。IDEA 是 JetBrains 公司的産品,這家公司總部位于捷克共和國的首都布拉格。

  java 開發工具很多,比如 netbean、eclipse 等等,單開發 Scala 可選的工具不多,主要使用 IDEA。

  Idea 工具開發 Scala 的快捷鍵也不是很多,是以使用相對比較簡單。

  IDEA 不是專門用于開發 Scala 的 IDE,但是确是最适合開發 Scala 的工具,因為在我們實際工作中,大部分是開發項目,而大資料項目不可避免的會使用到 Java, 是以會進行 Java 和 Scala 兩種語言的混合程式設計。 而 Idea 可以很好的支援 Java 和 Scala 的開發。

1.7.2 Scala 插件安裝

  預設情況下 IDEA 不支援 Scala 的開發,需要安裝 Scala 插件。

操作的具體步驟:

1、下載下傳插件:scala-intellij-bin-2017.2.6.zip,下載下傳位址:https://plugins.jetbrains.com/plugin/1347-scala,找到對應的版本

2、建議該插件檔案放到 scala 的安裝目錄,我們建立檔案夾 /plugin,友善我們管理

3、将插件安裝到 idea

4、打開 idea,先找到安裝插件的位置 File -> Settings -> Plugins -> Installplugin from disk… -> 選擇插件的路徑 -> OK -> OK

5、點選 OK,重新開機 idea

1.8 Scala 的開發快速入門

  需求說明:要求開發一個 Hello.scala 程式,可以輸出 “hello world!" [對 scala 程式基本結構說明]。

1.8.1 windows 下開發步驟

步驟如下:

  1、可以直接使用文本開發工具[Sublime Text 3]。

  2、将 Scala 代碼編寫到擴充名為 HelloScala.scala 的檔案中。[ 說明: 比如将源碼在目錄 D:\demo\ScalaDemo 下 ]

  3、通過 scalac 指令對該 scala 檔案進行編譯,生成 .class 檔案。[和javac類似]

  4、指令行下執行 scala HelloScala 就可以看到運作效果。

  5、​

​注意​

​:scala HelloScala 指令可以直接運作 HelloScala.scala 程式。[内部會有編譯和運作過程]

效果截圖:

大資料技術之_16_Scala學習_01_Scala 語言概述

對 scala 程式基本結構說明:

1.8.2 linux 下開發步驟

  1、直接使用 vim 開發,一個周遊數組的案例。

  2、将 Scala 代碼編寫到擴充名為 HelloScala.scala 的檔案中。[代碼說明]

  3、通過 scala 指令對該 scala 檔案進行編譯,生成 .class 位元組碼檔案。

  4、在終端執行 scala HelloScala 就可以看到運作效果。

​注意​

​:通過 scala HelloScala 指令可以直接運作 HelloScala.scala 程式。

代碼如下:

/**  * 隻要以後看到 object HelloScala,我們就應該有如下認識:  *     1、object HelloScala 對應的是一個 HelloScala$ 類型的靜态對象 MODULE$。  *     2、object HelloScala 在程式運作中是單例存在的。  */object HelloScala {  def main(args: Array[String]): Unit = {    println("hello scala")  }}      

1.8.3 IDEA 下開發步驟

  使用文本工具開發項目可以很好的了解運作原理,但是不利于開發綜合項目,是以在實際開發中我們要使用 Idea 來開發。

  1、建立一個 Maven 工程,在工程的 main 目錄下建立一個 scala 檔案夾,将該檔案夾标記為【源碼檔案夾】,友善管理。右鍵 scala -> Mark Directory as -> Sources Root

  2、預設情況下,不能寫 scala 程式,需要我們引入 scala 架構(即将該工程關聯上 scala),選中該項目右鍵 -> Add Framework Support… -> 勾選左側 Scala -> 指定 Scala 安裝的主目錄 -> OK。

  3、在 scala 檔案夾上右擊,選擇建立一個 Scala 類,勾選 Kind 為 Object,如下圖所示:

  4、開發一個 HelloScala.scala 程式。

  5、運作後,就可以看到輸出。

1.8.4 使用 java 寫一段模拟代碼,來模拟 scala 的執行流程

package com.atguigu.chapter01.Test;
/** * @author chenmingjun * 2019-03-22 18:25 */
/** * 可以了解我們在 main 中寫的代碼放在 HelloScala$ 的 mian 裡,即 scala 在底層運作的時候,編譯器做了一個包裝。 */public class HelloScala {
public static void main(String[] paramArrayOfString) {        HelloScala$.MODULE$.main(paramArrayOfString);    }}
final class HelloScala$ {    public static final HelloScala$ MODULE$;
static {        MODULE$ = new HelloScala$();    }
public void main(String[] args) {        System.out.println("hello scala");    }}      

1.8.5 Scala 執行流程分析

大資料技術之_16_Scala學習_01_Scala 語言概述

1.8.6 Scala 程式開發注意事項(重點)

注意事項:

  1、Scala 源檔案以 “.scala" 為擴充名。

  2、Scala 程式的執行入口是 main() 函數。

  3、Scala 語言嚴格區分大小寫。

  4、Scala 方法由一條條語句構成,每個語句後不需要分号(​

​Scala 語言會在每行後自動加分号​

​),這也展現出 Scala 的簡潔性。

  5、如果在同一行有多條語句,除了最後一條語句不需要分号,其它語句需要分号。

1.9 Scala 語言轉義字元

\t      :一個制表位,實作對齊的功能\n      :換行符\\      :一個\\"      :一個"\r      :一個回車  println("hello\rk");       

1.10 Scala 語言輸出的三種方式

  1、字元串通過+号連接配接(類似java)。

  2、printf 用法(類似C語言)字元串通過 % 傳值。

  3、字元串通過 $ 引用(類似PHP)。

示例代碼:

package com.atguigu.chapter01
/**  * @author chenmingjun  *         2019-03-22 19:14  */object PrintDemo {
def main(args: Array[String]): Unit = {    val str1: String = "hello"    val str2: String = "world"    // 連接配接列印    println(str1 + str2)
val name: String = "tom"    val age: Int = 10    val sal: Float = 10.67f    val height: Double = 180.75    // 格式化輸出    printf("名字=%s 年齡=%d 薪水=%.2f 身高=%.3f", name, age, sal, height)
// scala 支援使用 $ 輸出内容    println(s"個人資訊如下1:\n 名字$name\n 年齡$age\n 薪水$sal\n")    // 如果字元串中出現了類似 ${age + 10} ,則表示 {} 是一個表達式    println(s"個人資訊如下2:\n 名字${name}\n 年齡${age + 10}\n 薪水${sal}\n")  }}      

輸出結果:

helloworld名字=tom 年齡=10 薪水=10.67 身高=180.750個人資訊如下1:名字tom年齡10薪水10.67
個人資訊如下2:名字tom年齡20薪水10.67      

1.11 Scala 源碼的檢視的關聯

  在使用 scala 過程中,為了搞清楚 scala 底層的機制,需要檢視源碼,下面看看如果關聯和檢視 scala 的源碼包。

1、檢視源碼, 選擇要檢視的方法或者類, 輸入 Ctrl + B 或者 輕按兩下

當我們沒關聯源碼時,會看到如下圖:

我麼可以點選 Download… 自動下載下傳源碼,也可以手動關聯源碼。

2、手動關聯源碼

源碼包下載下傳位址:https://www.scala-lang.org/download/2.11.8.html,修改我們下載下傳的源碼包 scala-2.11.8.tar.gz 包名為 scala-sources-2.11.8.tar.gz,為了友善識别

步驟一:将我們的源碼包拷貝至 scala/lib 檔案夾下(scala-sources-2.11.8.tar.gz),這樣為了友善管理,然後進行解壓(因為 IDEA 不識别 xxx.tar.gz 這種格式的壓縮包)

步驟二:關聯即可,點選 Attach Sources…,選中 scala-sources-2.11.8 這個檔案夾,進行關聯,最後,可以看到源碼

大資料技術之_16_Scala學習_01_Scala 語言概述

1.12 注釋

1.12.1 介紹

  用于注解說明解釋程式的文字就是注釋,注釋提高了代碼的閱讀性。

  注釋是一個程式員必須要具有的良好程式設計習慣。将自己的思想通過注釋先整理出來,再用代碼去展現。

1.12.2 Scala 中的注釋類型

  1、單行注釋:格式:// 注釋文字

  2、多行注釋:格式: /* 注釋文字 */

  3、文檔注釋:注釋内容可以被工具 scaladoc 所解析,生成一套以網頁檔案形式展現的該程式的說明文檔。

1.12.3 文檔注釋案例

  1、打開檔案所在的目錄,選中檔案右鍵 -> Show in Explorer

  2、在指令行視窗中輸入 ​

​scaladoc -d d:/mydoc Comment.scala​

​ 可以生成對應的文檔說明。

示例代碼如下:

package com.atguigu.chapter01
/**  * 文檔注釋案例  * @author chenmingjun  *         2019-03-23 0:22  */object Comment {  def main(args: Array[String]): Unit = {    println("hello world")  }
/**    * @deprecated 過期    * @example    *          輸入 n1 = 10 n2 = 20 return 30    * @param n2    * @return 求和    */  def sum(n1: Int, n2: Int): Int = {    return n1 + n2  }}      

1.12.4 scala 的代碼規範說明

1.12.5 正确的注釋和注釋風格

  檢視 Scala 源碼。

1.12.6 正确的縮進和空白

  1、使用一次 tab 操作,實作縮進,預設整體向右邊移動,使用 Shift + Tab 整體向左移。

  2、或者使用 Ctrl + Alt + L 來進行格式化代碼。

  3、運算符兩邊習慣性各加一個空格。比如:2 + 4 * 5。

  4、一行最長不超過 80 個字元,超過的請使用換行展示,盡量保持格式優雅。

1.12.7 Scala 官方程式設計指南

API 下載下傳位址:https://www.scala-lang.org/download/2.11.8.html

大資料技術之_16_Scala學習_01_Scala 語言概述

1.13 本章知識回顧

  • Scala 語言的 sdk 是什麼?答:Scala 的類庫。
  • Scala 環境變量配置及其作用。

    配置 SCALA_HOME=D:\learn\Scala\scala-2.11.8

    配置 Path=%SCALA_HOME%\bin

  • Scala 程式的編寫、編譯、運作步驟是什麼?能否一步執行??

    編寫:就是使用工具,開發 scala 程式。

    編譯:就是将 .scala 檔案編譯成 .class 【指令:scalac]】。

    運作:就是使用 scala 來将 .class 檔案加載到 jvm 并運作,可以直接運作 .scala, 但是速度慢。【指令:scala xxx.scala】。

  • Scala 程式編寫的規則。

    // 規範基本上和 java 類似。但是語句後面不需要加上分号。

  • 簡述:在配置環境、編譯、運作各個步驟中常見的錯誤。

Copyright ©2018-2019

【轉載文章務必保留出處和署名,謝謝!】