- Spark大數據編程實用教程
- 艾叔主編
- 1713字
- 2021-03-23 18:09:24
1.5 Spark和Scala
Spark框架本身是使用Scala開發的,Scala是一種小眾語言,個性十分鮮明。那么,Scala有什么特點?為什么要選擇Scala來開發Spark框架呢?對于用戶來說,是選擇Scala來開發Spark應用程序,還是采用Spark所支持的其他語言,如Java、Python?本節將回答這些問題。
1.5.1 Scala語言簡介
Scala是一種特性豐富、功能強大的編程語言,具有以下特點。
●Scala結合了面向對象和函數式編程的特性;
●Scala是強類型(Strong Typing)語言,它不支持類型的隱式轉換;
●Scala是靜態(Static)類型的語言,這個特性有助于減少復雜應用程序中的錯誤;
●Scala程序在JVM上運行,可以利用Java豐富的庫資源;
●Scala支持交互式解釋器 REPL(Read-Eval-Print-Loop,“讀取-求值-輸出”循環),可以直接在 REPL 上輸入Scala語言,后臺自動編譯、運行,顯示結果,可以實現程序的快速驗證。
可以說,現有主流編程語言的特性在Scala中都可以看到。這對于經驗豐富的開發者來說,各種特性可以統一在一門語言中,非常方便開發。但是,對于初學者來說,學習門檻高,內容龐雜,因此,學習曲線會比較陡峭,不少初學者在接觸Scala后望而卻步,但隨著學習的深入,學習者會越來越體會到Scala帶來的便利和強大功能,以及語言高度簡潔所帶來的魅力。
Scala是一門開發語言,Scala程序在JVM上運行;
Spark是一個分布式處理框架,Spark本身是由Scala語言編寫的;
可以使用多種語言來編寫在Spark上運行的程序,如Scala、Java、Python等。
1.5.2 為什么用Scala開發Spark框架
為什么使用Scala開發Spark框架?
Spark 作者的論文《Resilient Distributed Datasets:A Fault-Tolerant Abstraction for In-Memory Cluster Computing》中解釋了原因。選擇Scala開發Spark是因為它同時具備簡潔和高效這兩個特點。
●簡潔:Scala對于交互式應用開發非常有用,Scala可以直接通過Shell執行,在大數據處理的場景中,可以快速看到處理后的結果,很多功能往往就是一行代碼就可以搞定,不需要像Java那樣需要編寫很多行代碼才能編寫一個完整的程序,編譯后再運行,因此,Scala的開發效率會比較高(語言上的簡潔+直接運行);
●高效:Scala本質上是靜態類型語言,它被編譯成Java的字節碼在JVM上運行,效率和Java基本相當,比較高效。
1.5.3 為什么用Scala開發Spark程序
使用Scala開發Spark程序有很多優點。
●Scala支持函數式編程;
●Scala 的 REPL(Read-Eval-Print-Loop,讀取-計算-打印-循環,又稱交互式解釋器)可以即時驗證程序;
●Scala 支持隱式轉換(是函數調用的隱式轉換,不是變量類型的隱式轉換),這樣,可以在沒有第三方庫源碼的基礎上(第三方庫可以不動),擴展庫接口;
●Scala支持類型推斷,代碼更簡潔;
●Scala程序在JVM上運行,可以兼容所有的Java庫;
●Spark框架本身采用Scala開發,Scala屬于Spark的原生語言,Spark對Scala API的支持度最好;
●掌握Scala是閱讀Spark源碼及深入Spark內部機制的必要條件。
當然,使用Scala來開發Spark程序,也存在一些困難:
●Scala學習門檻高、內容龐雜,學習曲線陡峭,學習人群相對少;
●Scala編譯速度慢;
●Scala 功能強大,同樣的功能,通常會有很多種實現方法,每種方法的效率差距可能會很大(同樣的功能,Python可能只有1種實現),因此,有種說法,說Scala是為聰明人準備的,這個和C語言“相信程序員”的說法類似;
●Scala 代碼簡潔,表達力強,但有時為了簡潔,會過分抽象或者引入生僻的操作符或函數式語法,這樣就增加了協作開發和后期維護的困難;
●支持Scala的集成開發工具少且功能不全,要弱于Python和Java;
●Scala的社區規模、成熟度都要弱于Java和Python。
1.5.4 Scala開發Spark程序所涉及的技術
Scala開發Spark程序所涉及的技術匯總如下。
●Scala編譯、運行環境構建;
●Scala程序的編譯與運行;
●IDEA的使用,包括:編輯器使用、常用快捷鍵、Build程序、調試和打包等;
●Scala程序的運行原理;
●Scala程序的基本架構;
●Scala 編程的基本語法:程序入口、基本數據類型、變量定義、關鍵詞、控制結構、函數、IO接口、字符串處理和正則表達式等;
●Scala 高級特性:隱式轉換、模式匹配、匿名函數、柯里化、面向對象、多線程編程和網絡編程等;
●Spark函數庫的Scala API:Spark Core的RDD和SparkContext的API、MLlib的RDD API和DataFrame接口、GraphX接口、Streaming的DStream接口、Structured Streaming接口和DataFrame/Dataset接口等。
Scala開發Spark程序所涉及的技術中,有的可能和開發Spark框架的技術重疊,例如Spark函數庫的接口,在開發Spark程序時,強調的是如何使用 Scala 調用該接口,重點是接口的使用,包括函數名、傳參、返回值;而在開發Spark框架時,強調的是如何實現該接口的功能,兩者側重點不同。
1.5.5 Scala語言基礎
為了便于大家快速掌握 Scala 的基礎語法和使用,本書精選 Scala 的知識點,編寫了配套的《零基礎快速入門Scala》免費電子書,關注公眾號“艾叔編程”即可獲取。