R,Python,Scala,Go,Julia
R
R語言主要用于統計分析、繪圖、數據挖掘,可在多種平臺下運行,包括UNIX、Windows和MacOS。R主要是以命令行操作,也有圖形用戶界面支持。
優點:
缺點:
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開發包。
總結
以上是生活随笔為你收集整理的R,Python,Scala,Go,Julia的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 并行计算框架
- 下一篇: 解决 Python2.7 报错 Unic