官术网_书友最值得收藏!

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》免費電子書,關注公眾號“艾叔編程”即可獲取。

主站蜘蛛池模板: 东乡| 车致| 张掖市| 丹阳市| 资溪县| 仙游县| 安阳市| 济源市| 灵璧县| 双桥区| 泾阳县| 同心县| 汝城县| 陆良县| 安岳县| 南投市| 南木林县| 富川| 安宁市| 雷州市| 含山县| 沂南县| 永清县| 崇仁县| 彝良县| 嘉荫县| 和硕县| 德格县| 宁河县| 丘北县| 松江区| 安陆市| 西乌| 武安市| 天镇县| 浦江县| 海口市| 吉水县| 旬阳县| 金坛市| 淮安市|