Scala學習系列(一)——Scala爲何是大數據第一高薪語言

爲何是Scala

雖然在大數據領域Java的使用更普及,Python也有後來居上的勢頭,但Scala一直有着不可動搖的地位。咱們熟悉的Spark,Kafka,Flink都是由Scala完成了其核心代碼的開發。javascript

因此掌握Scala不只能夠學習大數據組件的源碼,並且會極大的提高大數據開發的效率。java

這也是Scala的薪資水平一直遙遙領先的緣由。程序員

file

根據2019年全球編程語言薪資統計,排名前幾名的Scala無疑是崗位需求與收入一樣優秀的語言。固然收入與地域之間也是有區別的,好比在美國,Scala 的收入最高,能夠達到 143k 美圓,其次是 Clojure(139k 美圓)、Go(136k 美圓)、Erlang(135k 美圓)、Objective-C(132k 美圓)編程

file

該數據根據 Stack Oveflow2019 年關於編程語言薪酬排行開發者調查報告得出centos

爲何會有這麼高的薪資?安全

這恐怕是源於Scala的特色:架構

  • 優雅:這是框架設計師第一個要考慮的問題,框架的用戶是應用開發程序員,API是否優雅直接影響用戶體驗。併發

  • 速度快:Scala語言表達能力強,一行代碼抵得上Java多行,開發速度快;Scala是靜態編譯的,因此和JRuby,Groovy比起來速度會快不少。app

  • 能融合到Hadoop生態圈:Hadoop如今是大數據事實標準,Spark並非要取代Hadoop,而是要完善Hadoop生態。JVM語言大部分可能會想到Java,但Java作出來的API太醜,或者想實現一個優雅的API太費勁。框架

這也是爲何不少大數據組件的源碼都是Scala開發的緣由。

掌握Scala之後,咱們能夠飛速的開發Flink,Spark等大數據工程,開發效率獲得極大的提升,並且使用函數式編程,代碼也會更簡潔,炫酷。

file

什麼是Scala

Scala產生於瑞士的洛桑聯邦理工學院(EPEL),是「可擴展語言」(Scalable Language)的縮寫,Scala是一種多範式的編程語言,其設計的初衷是要集成面向對象編程和函數式編程的各類特性。你可使用Scala編寫出更加精簡的程序,也能用於構建大型複雜系統,還能夠訪問任何Java類庫而且與Java框架進行交互。

file

經過官網咱們看到對於Scala的描述:

Scala combines object-oriented and functional programming in one concise, high-level language. Scala's static types help avoid bugs in complex applications, and its JVM and JavaScript runtimes let you build high-performance systems with easy access to huge ecosystems of libraries.

Scala主要特性以下:

一、運行於JVM和JavaScript之上

Scala利用了JVM的高性能,並且也把Java豐富的工具和類庫爲其所用。不過Scala並非僅僅支持JVM,Scala-Js已經支持Scala運行於Js之上!

file

scala-js是將scala編譯成js的編譯器,目的在於使用scala的衆多類庫和強類型特徵構建出穩定可擴展的js應用。

二、靜態類型

在Scala語言中,靜態類型(static typing)是構建健壯應用系統的一個工具。Scala修正了Java類型系統中的一些缺陷,此外經過類型推演(typeinference)也免除了大量冗餘代碼。

動態語言和靜態語言

  • 動態類型語言:是指在運行期纔去作數據類型檢查的語言。在用動態言語編程時,不用給變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。Python和Ruby就是一種典型的動態類型語言。

  • 靜態類型語言:與動態類型語言恰好相反,它的數據類型檢查發生在編譯階段,也就是說在寫程序時要聲明變量的數據類型。C、C++、C#、Java都是靜態類型語言的典型表明。

強類型語言與弱類型語言

  • 強類型語言:使之強制數據類型定義的語言。沒有強制類型轉化前,不容許兩種不一樣類型的變量相互操做。強類型定義語言是類型安全的語言,如Java,C#和Python,好比Java中的「int i = 0.0」是沒法經過編譯的。

  • 弱類型語言:數據類型能夠被忽略的語言。與強類型語言相反,一個變量能夠賦不一樣數據類型的值,容許將一塊內存看作多種類型,好比直接將整型變量與字符變量相加。JavaScript,PHP都是弱類型語言。

注意、強類型語言在速度上遜色於弱類型語言,使用弱類型語言可節省不少代碼量,有更高的開發效率。而對於構建大型項目,使用強類型語言可能會比使用弱類型更加規範可靠。

file

三、混合式編程範式——面向對象編程,函數式編程

Scala徹底支持面向對象編程(OOP)。引入了特徵(trait)改進了Java的對象模型。trait能經過使用混合結構(maxin composition)簡潔的實現新的類型。在Scala中,一切都是對象,即便是數值類型。

Scala也徹底的支持函數式編程(FP),函數式編程已經被視爲解決併發、大數據以及代碼正確性問題的最佳工具。使用不可變值、函數、高階函數以及函數集合,有助於編寫出簡潔、強大而又正確的代碼。

函數式編程更關心數據的映射,運用函數式編程,好比用Spark進行WordCount,只須要一行代碼

sc.textFile("/home/centos/test.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).collect
四、複雜的類型系統

Scala對Java類型進行了擴展,提供了更靈活的泛型以及一些有助於提升代碼正確性的改進。經過使用類型推演。Scala編寫的代碼可以和動態的類型語言編寫的代碼同樣精簡。

五、簡潔、優雅、靈活的語法

使用Scala以後,Java中冗長的表達式不見了,取而代之的是簡潔的Scala方言。Scala提供了一些工具,這些工具可用於構建領域特定語言(DSL),以及對用戶友好的API接口。

六、可擴展的架構

使用Scala,能編寫出簡短的解釋性腳本,並將其粘合成大型的分佈式應用。如下四種語言機制有助於提高系統的擴展性:

  • 使用trait實現的混合結構
  • 抽象類型成員和泛型
  • 嵌套類
  • 顯式自類型(self type)

Scala與Java有着緊密的關係,能夠把Scala看作是Java的升級版,而這些優點也讓Scala擁有了巨大競爭優點

file

Scala與Java關係

Scala有着其獨特的魅力,在加上大數據,流計算開發的增多,Scala有着愈來愈豐富的用武之地,因此很難說咱們會由於Scala選擇了大數據,仍是由於大數據選擇了Scala。

下一章,咱們將從頭開始學習Scala,未完待續~

更多大數據,實時計算相關博文與科技資訊,歡迎搜索或者掃描下方關注 「實時流式計算」

file

相關文章
相關標籤/搜索