1. 程式人生 > >R,Python,Scala,Go,Julia

R,Python,Scala,Go,Julia

R

R語言主要用於統計分析、繪圖、資料探勘,可在多種平臺下執行,包括UNIX、Windows和MacOS。R主要是以命令列操作,也有圖形使用者介面支援。

優點:

  1. 具有包括神經網路、非線性迴歸模型、系統、繪圖和幾乎所有數量和統計應用功能的開源開發包。
  2. 具有全面的、內建的統計功能和方法,擅長處理矩陣代數。
  3. 優秀的資料視覺化功能。

缺點:

  1. 不是一種快速語言,並且沒有很好的通用性,雖然對於統計和資料科學而言R語言是一個很好的選擇,但是對於通用程式設計而言並不友好。
  2. 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開發包。