關於這場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的特徵。


分享到:


相關文章: