Scala學習系列(一)——Scala為什麼是大數據第一高薪語言

来源:https://www.cnblogs.com/tree1123/archive/2020/04/10/12672057.html
-Advertisement-
Play Games

為什麼是Scala 雖然在大數據領域Java的使用更普及,Python也有後來居上的勢頭,但Scala一直有著不可動搖的地位。我們熟悉的Spark,Kafka,Flink都是由Scala完成了其核心代碼的開發。 所以掌握Scala不僅可以學習大數據組件的源碼,而且會極大的提升大數據開發的效率。 這也 ...


為什麼是Scala

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

所以掌握Scala不僅可以學習大數據組件的源碼,而且會極大的提升大數據開發的效率。

這也是Scala的薪資水平一直遙遙領先的原因。

file

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

file

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

為什麼會有這麼高的薪資?

這恐怕是源於Scala的特點:

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

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

  • 能融合到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主要特性如下:

1、運行於JVM和JavaScript之上

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

file

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

2、靜態類型

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

動態語言和靜態語言

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

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

強類型語言與弱類型語言

  • 強類型語言:使之強制數據類型定義的語言。沒有強制類型轉化前,不允許兩種不同類型的變數相互操作。強類型定義語言是類型安全的語言,如Java,C#和Python,比如Java中的“int i = 0.0”是無法通過編譯的。

  • 弱類型語言:數據類型可以被忽略的語言。與強類型語言相反,一個變數可以賦不同數據類型的值,允許將一塊記憶體看做多種類型,比如直接將整型變數與字元變數相加。JavaScript,PHP都是弱類型語言。

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

file

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

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

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

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

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

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

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

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

6、可擴展的架構

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

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

Scala與Java有著緊密的關係,可以把Scala看做是Java的升級版,而這些優勢也讓Scala擁有了巨大競爭優勢

file

Scala與Java關係

Scala有著其獨特的魅力,在加上大數據,流計算開發的增多,Scala有著越來越豐富的用武之地,所以很難說我們會因為Scala選擇了大數據,還是因為大數據選擇了Scala。

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

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

file


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 問題:同一區域網,Mac(使用Microsoft Remote Desktop)無法遠程連接win7 之前需要兩臺電腦配置的我就不詳細說了,網上有很多。 報錯: 解決辦法: win7 1.運行 -> gpedit.msc 2.電腦配置->管理模版->網路->網路連接->windows防火牆->標準 ...
  • 電力巡檢機器人 電力巡檢人有什麼用?長什麼樣? 炎熱的夏天室外氣溫實在是高,由於陽光的暴曬,設備區的溫度甚至讓人窒息;而下雨天又影響視線,傳統的人工巡檢需要在各種天氣下進行。 而智能電力巡檢機器人的出現,就是為瞭解決以上的難題。電力巡檢機器人身材都比較嬌小,可以在變電站內隨意的穿梭。 頂部的一對大眼 ...
  • Vi/Vim 可以說是文本編輯中的一代傳奇人物,直至現在,它仍然在高級程式員的武器庫中占有一席之地。每個 Linux 發行版預設都包含Vim ,而且即使你不是 Linux 系統用戶,你也可以安裝 Vim 。 為什麼到現在還來講這款古老的軟體?因為它牛逼啊!它包含幾乎所有功能的輕量級鍵盤快捷鍵、內置表 ...
  • 環境準備 1. Redis集群(Windows集群搭建) 啟動Redis集群,給每個節點加上Title start "Redis - 6379" /min redis-server.exe redis.6379.conf start "Redis - 6380" /min redis-server. ...
  • 說明:-u :用戶名 -p :密碼 --lock-all-tables :執行操作時鎖住所有表,防止操作時有數據修改 1、設置mysql配置文件[ 我使用的寶塔,所以直接在軟體商店的mysql裡邊直接進行配置設置 ] 主伺服器:【mysqld】:log-bin=mysql-bin log_slave ...
  • 資料庫的完整性 什麼是數據的完整性 保證用戶輸入的數據保存到資料庫中是正確的。 如何添加數據完整性 在創建表時給表中添加約束 完整性分類 1. 實體完整性 2. 域完整性 3. 參照完整性 實體完整性 1. 什麼是實體完整性 表中的一行(一條記錄)代表一個實體(entity) 2. 實體完整性的作用 ...
  • 第一步,user許可權配置,網上大多數教程都是停留在這一步,不贅述了(phpstudy有個快捷方式,一鍵修改) 第二步,放開windows防火牆中的進入埠限制(防火牆->高級設置->進入規則->埠3306) 第三步,在騰訊雲控制台的安全組裡放開3306埠的進入規則。 此處吐槽一下,貌似控制台有點 ...
  • redis redis的安裝一 安裝的準備 首先得買一個伺服器(我買的阿裡雲ecs輕量級); 再下載遠程客戶端(我用的Xshell,Xftp); 打開Xftp將下載好得redis壓縮包傳輸Xftp中,在進入Xshell中Linux命令安裝; rides安裝 下載地址:https://redis.io ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...