R,Python,Scala,Go,Julia
R
R語言主要用於統計分析、繪圖、資料探勘,可在多種平臺下執行,包括UNIX、Windows和MacOS。R主要是以命令列操作,也有圖形使用者介面支援。
優點:
- 具有包括神經網路、非線性迴歸模型、系統、繪圖和幾乎所有數量和統計應用功能的開源開發包。
- 具有全面的、內建的統計功能和方法,擅長處理矩陣代數。
- 優秀的資料視覺化功能。
缺點:
- 不是一種快速語言,並且沒有很好的通用性,雖然對於統計和資料科學而言R語言是一個很好的選擇,但是對於通用程式設計而言並不友好。
- R語言的一些不尋常的特點和大多數的語言相比顯得有些古怪,譬如:從1開始索引,使用多個賦值操作符,非常規的資料結構。
Python
- Python在學術界一直很流行,尤其是在自然語言處理(NLP)領域。
- Python有面向神經網路的Theano和Tensorflow,有面向機器學習的scikit-learn,以及面向資料分析的NumPy和Pandas。
- 有Juypter/iPython這種基於Web的筆記本伺服器框架讓你可以使用一種可共享的日誌格式,將程式碼、圖形以及幾乎任何物件混合起來。
- Python往往在大資料處理框架中得到支援,但與此同時,它往往又不是“一等公民”。比如說,Spark中的新功能幾乎總是出現在Scala繫結的首位,可能需要用PySpark編寫面向那些更新版的幾個次要版本(對Spark Streaming/MLLib方面的開發工具而言尤為如此)。
- Python是一種動態型別語言,這意味著型別錯誤經常是不可預料的。
- 對於特定的統計和資料分析目的,R的大量包使它比Python更具優勢。對於通用語言,更快更安全的Python稍有優勢。
Scala
Scala是一種能夠執行在JVM上的語言。它是一種多範型語言,支援面向物件和函數語言程式設計。
優點:
- 當使用叢集計算來處理大資料時,Scala + Spark是極好的解決方案。
- Scala能夠編譯成java位元組碼執行在JVM上。這使的Scala成為了一種強大的通用語言,同時也非常適合資料科學。
缺點:
- 語法和型別系統通常過為複雜。
- 如果沒有那麼多的資料需要處理時,使用其他語言(如R或Python)可能會是一個更好的選擇。
Go
Go(Golang)是Google開發的一種靜態強型別、編譯型、併發型,並具有垃圾回收功能的程式語言。
與C++相比,Go語言並不包括如異常處理、繼承、泛型、斷言、虛擬函式等功能,但增加了 Slice 型、併發、管道、垃圾回收、介面(Interface)等特性的語言級支援。
Go語言的主要的功能在於簡單易用的並行設計Goroutine,支援非同步執行而不需要擔心一個函式導致程式中斷,因此Go語言也非常地適合網路服務。
Goroutine是類似執行緒的概念(但Goroutine並不是執行緒)。執行緒屬於系統層面,通常來說建立一個新的執行緒會消耗較多的資源且管理不易。而 Goroutine就像輕量級的執行緒,可以稱其為併發,一個Go程式可以執行超過數萬個 Goroutine,並且這些效能都是原生級的,隨時都能夠關閉、結束。
Julia
Julia是一種用於數學計算的高階程式語言,為分散式計算和並行而設計。Julia最大的賣點就是處理速度,作為一門動態語言,它幾乎具備跟靜態語言,如C語言一般的效率。
按開發者的話說,“我們希望這門開源語言像C一樣快,像Python一樣通用,像R做統計那麼簡單,像Perl做文字處理那麼方便,像Matlab的線性代數一樣強大,還和Shell一樣可以把各種程式連線起來”。
然而使用者實在過少,支援庫也少得可憐。
Spark 多語言程式設計
Spark 目前支援Scala、Python、Java三種程式語言。
- Scala 作為Spark的原生語言,程式碼優雅、簡潔而且功能完善,很多開發者都比較認可,它是業界廣泛使用的Spark程式開發語言。
- Spark 也提供了Python的程式設計模型PySpark,使得Python可以作為Spark開發語言之一。 儘管現在PySpark還不能支援所有的Spark API,但是以後的支援度會越來越高。
- Java 也可以作為Spark的開發語言之一,但是相對於前兩者而已,遜色了很多。但是Java8卻很好地適應了Spark的開發風格。
Python API和Scala API:
- Python是動態語言,RDD 可以持有不同型別的物件。
- PySpark 目前並沒有支援全部的API,但核心部分已經全部支援。
- 在PySpark裡,RDD支援和Scala一樣的方法,只不過這些方法是Python函式來實現的,返回的也是Python的集合型別;對於RDD方法中使用的短函式,則可以使用Python的Lambda語法實現。
- 使用Python開發Spark應用程式也有很多優勢,比如說不需要編譯,使用方便,還可以與許多系統整合,特別是NoSQL大部分都提供了Python開發包。