關於這場Python 和Scala的較量,你怎麼看?

格伯納發表於2018-05-21

關於這場Python 和Scala的較量,你怎麼看?

當談到ApacheSPark框架時,資料科學(網路)社群分為兩個陣營:有的認為Scala好用,有的認為Python好用。本文的目的就是比較兩者的優缺點,以供大家參考。

關於這場Python 和Scala的較量,你怎麼看?

ApacheSPark是目前最流行的大資料分析框架(之一)。可以為Scala、Python、Java和R語言提供API支援,但本文只討論前兩種語言。因為Java不支援讀寫—評估—輸出這一迴圈,R語言普及度又不高。前兩種中,認為Scala好用的人表示,用Scala編寫ApacheSPark很快。而且Scala作為靜態型別的語音,已經被編譯收錄到了JVM(Java虛擬機器)。作者認為,每一種方法都有其優缺點,最終的選擇應取決於應用程式的型別。

效能

Scala的執行速度通常比Python快10倍左右。(因為JVM技術支援Scala語言的執行。)相比之下,作為動態類語言的Python,速度明顯緩慢。因為在Python中呼叫ApacheSPark庫需要大量的程式碼處理。所以從效能方面講,Scala更適合對有限資料庫的呼叫。

此外,Scala基於JVM技術,又根植於Hadoop框架下的HDFS檔案系統,所以它同Hadoop框架的互動、相容非常好。相比之下,Python於Hadoop框架的互動就及其糟糕了。開發人員甚至得使用第三方外掛才行(如hadopy)。

關於這場Python 和Scala的較量,你怎麼看?

學習曲線

這兩種語言都是功能性、面向特定物件的語言,它們具有相似的語法構造。與Python相比,Scala可能要複雜一些,因為它的功能更加高階。Python適合於簡單的邏輯處理,而Scala更適合於複雜的工作流。但Python也不是一無是處,因為Python語法簡單,有著更加標準的程式庫。

併發性

Scala有多個標準程式庫,而且支援在大資料生態系統中快速整合資料庫。它可以使用多個併發基元編寫程式碼,而Python不支援併發或多執行緒編寫程式碼。不過,Python支援重量級程式分叉。只不過它一次只能有一個執行緒處於活躍狀態。而且每當編寫新程式碼時,都必須重新啟動其他程式,這無疑會增加記憶體的佔用。

實用性

Python的特點是簡潔、容易上手。而Scala則在框架、庫、隱式、宏等方面有著極大的優勢。這也是Scala在MapReduce框架中有著優秀表現的原因。由於Scala的API採集一致,因此許多Scala資料框架遵循著相似的資料型別。開發人員只需學習它常用的標準程式庫,就可以輕鬆地掌握其他庫。ApacheSPark是用Scala編寫的,因此瞭解Scala也可以幫助您認識並修改ApacheSPark內部的功能。但對於NLP來說,Python則是首選。(因為Scala缺乏用於機器學習或NLP的工具。)此外,Python也是GraphX、GraphFrames和MLLib的不二之選。Python的視覺化庫是對Pyspark的補充。這是ApacheSPark和Scala都沒有的東西。

程式碼恢復與安全

Scala作為靜態類語言,它支援我們查詢編譯時犯的錯誤。而Python是動態類語言。也就是說,在每次更改現有程式碼時,Python語音更容易出錯。因此,用Scala重構程式碼比Python重構更容易。

關於這場Python 和Scala的較量,你怎麼看?

結語

Python執行速度較慢,但上手容易。Scala是執行最快且上手能力適中的程式語言。透過Scala能幫助你能更加全面的瞭解ApacheSPark,因為ApacheSPark就是用Scala編寫的(但也不是絕對)。要知道,對程式語言的選擇取決於專案的特徵,我們要根據專案的特徵做到靈活變通。Python面向分析,Scala面向工程,但這兩種語言都是構建資料科學應用程式的優秀語言。總的來說,Scala更能充分的利用ApacheSPark的特徵。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31509949/viewspace-2154824/,如需轉載,請註明出處,否則將追究法律責任。

相關文章