scala簡介
Scala是一門多范式的編程語言,一種類似java的編程語言,設(shè)計(jì)初衷是實(shí)現(xiàn)可伸縮的語言、并集成面向?qū)ο缶幊毯秃瘮?shù)式編程的各種特性。
scala的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
Scala = haskell (for,yield = do notation)+ ocaml((object + trait)實(shí)現(xiàn)module system,這里注意是trait而不是object 關(guān)鍵詞 實(shí)現(xiàn)first class module。如果再加上Path depentent type 就更強(qiáng)大了) + object oriented(函數(shù)也被當(dāng)作Object) + 、、,是一門非常復(fù)雜的語言,但同時(shí)也是最實(shí)用的函數(shù)式語言,生態(tài)很豐富,web 有play,akka-http,數(shù)據(jù)庫有Slick(為Sql數(shù)據(jù)庫提供了極端簡潔的使用方式),深度學(xué)習(xí)可以直接調(diào)java 的dl4j,還能通過scalajs編譯到JS。scala 其實(shí)是很純的面向?qū)ο笳Z言(函數(shù)也是object),確還能當(dāng)成函數(shù)式語言使用,不得不贊賞其精妙!
缺點(diǎn):
特性太多學(xué)習(xí)曲線很陡峭,主要是加入了Subtyping、path dependent type 等造成類型系統(tǒng)復(fù)雜,而語法其實(shí)不算復(fù)雜。還有就是類型系統(tǒng)Unsound(不清楚這個有什么影響),類型推導(dǎo)不如Haskell的HM 類型系統(tǒng),加類型標(biāo)記的時(shí)候比HM type system 多
python簡介
Python 是一個高層次的結(jié)合了解釋性、編譯性、互動性和面向?qū)ο蟮哪_本語言。Python 的設(shè)計(jì)具有很強(qiáng)的可讀性,相比其他語言經(jīng)常使用英文關(guān)鍵字,其他語言的一些標(biāo)點(diǎn)符號,它具有比其他語言更有特色語法結(jié)構(gòu)。
python的優(yōu)缺點(diǎn)
python語言的優(yōu)點(diǎn)
1、作為初學(xué)python的科班出身的小白,python非常簡單,非常適合人類閱讀。閱讀一個良好的Python程序就感覺像是在讀英語一樣,盡管這個英語的要求非常嚴(yán)格!Python的這種偽代碼本質(zhì)是它最大的優(yōu)點(diǎn)之一。它使你能夠?qū)W⒂诮鉀Q問題而不是去搞明白語言本身。
2、易學(xué)。python雖然是用c語言寫的,但是它擯棄了c中非常復(fù)雜的指針,簡化了python的語法。
3、Python是FLOSS(自由/開放源碼軟件)之一。簡單地說,你可以自由地發(fā)布這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用于新的自由軟件中。Python希望看到一個更加優(yōu)秀的人創(chuàng)造并經(jīng)常改進(jìn)。
4、可移植性————由于它的開源本質(zhì),Python已經(jīng)被移植在許多平臺上(經(jīng)過改動使它能夠工作在不同平臺上)。如果你小心地避免使用依賴于系統(tǒng)的特性,那么你的所有Python程序無需修改就可以在下述任何平臺上面運(yùn)行。這些平臺包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至還有PocketPC、Symbian以及Google基于linux開發(fā)的Android平臺!
5、在計(jì)算機(jī)內(nèi)部,Python解釋器把源代碼轉(zhuǎn)換成稱為字節(jié)碼的中間形式,然后再把它翻譯成計(jì)算機(jī)使用的機(jī)器語言并運(yùn)行。事實(shí)上,由于你不再需要擔(dān)心如何編譯程序,如何確保連接轉(zhuǎn)載正確的庫等等,所有這一切使得使用Python更加簡單。由于你只需要把你的Python程序拷貝到另外一臺計(jì)算機(jī)上,它就可以工作了,這也使得你的Python程序更加易于移植。
6、Python既支持面向過程的函數(shù)編程也支持面向?qū)ο蟮某橄缶幊?。在面向過程的語言中,程序是由過程或僅僅是可重用代碼的函數(shù)構(gòu)建起來的。在面向?qū)ο蟮恼Z言中,程序是由數(shù)據(jù)和功能組合而成的對象構(gòu)建起來的。與其他主要的語言如C++和Java相比,Python以一種非常強(qiáng)大又簡單的方式實(shí)現(xiàn)面向?qū)ο缶幊獭?/p>
7、可擴(kuò)展性和可嵌入性。如果你需要你的一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開,你可以把你的部分程序用C或C++編寫,然后在你的Python程序中使用它們。你可以把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。
8、豐富的庫。Python標(biāo)準(zhǔn)庫確實(shí)很龐大。python有可定義的第三方庫可以使用。它可以幫助你處理各種工作,包括正則表達(dá)式、文檔生成、單元測試、線程、數(shù)據(jù)庫、網(wǎng)頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統(tǒng)、GUI(圖形用戶界面)、Tk和其他與系統(tǒng)有關(guān)的操作。記住,只要安裝了Python,所有這些功能都是可用的。這被稱作Python的“功能齊全”理念。除了標(biāo)準(zhǔn)庫以外,還有許多其他高質(zhì)量的庫,如wxPython、Twisted和Python圖像庫等等。
9、Python確實(shí)是一種十分精彩又強(qiáng)大的語言。它合理地結(jié)合了高性能與使得編寫程序簡單有趣的特色。
10、規(guī)范的代碼。Python采用強(qiáng)制縮進(jìn)的方式使得代碼具有極佳的可讀性。
python語言的缺點(diǎn)
很多時(shí)候不能將程序連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無此限制,可以較為方便的在shell下完成簡單程序,不需要如Python一樣,必須將程序?qū)懭胍粋€.py文件。(對很多用戶而言這也不算是限制)
⑴運(yùn)行速度,有速度要求的話,用C++改寫關(guān)鍵部分吧。不過對于用戶而言,機(jī)器上運(yùn)行速度是可以忽略的。因?yàn)橛脩舾靖杏X不出來這種速度的差異。
⑵既是優(yōu)點(diǎn)也是缺點(diǎn),python的開源性是的Python語言不能加密,但是目前國內(nèi)市場純粹靠編寫軟件賣給客戶的越來越少,網(wǎng)站和移動應(yīng)用不需要給客戶源代碼,所以這個問題就是問題了。國隨著時(shí)間的推移,很多國內(nèi)軟件公司,尤其是游戲公司,也開始規(guī)模使用他。
⑶ 構(gòu)架選擇太多(沒有像C#這樣的官方.net構(gòu)架,也沒有像ruby由于歷史較短,構(gòu)架開發(fā)的相對集中。Ruby on Rails 構(gòu)架開發(fā)中小型web程序天下無敵)。不過這也從另一個側(cè)面說明,python比較優(yōu)秀,吸引的人才多,項(xiàng)目也多。
scala和python對比分析哪個好
scala和python到底哪個更好呢?接下來小編基于Spark環(huán)境詳細(xì)的對比分析一下這兩種語言,哪款更好一看便知。
1、性能對比
由于Scala是基于JVM的數(shù)據(jù)分析和處理,Scala比Python快10倍。當(dāng)編寫Python代碼用且調(diào)用Spark庫時(shí),性能是平庸的,但如果程序涉及到比Python編碼還要多的處理時(shí),則要比Scala等效代碼慢得多。Python解釋器PyPy內(nèi)置一個JIT(及時(shí))編譯器,它很快,但它不提供各種Python C擴(kuò)展支持。在這樣的情況下,對庫的C擴(kuò)展CPython解釋器優(yōu)于PyPy解釋器。
使用Python在Spark的性能開銷超過Scala,但其重要性取決于您在做什么。當(dāng)內(nèi)核數(shù)量較少時(shí),Scala比Python快。隨著核數(shù)的增加,Scala的性能優(yōu)勢開始縮小。
當(dāng)大量的處理其工作時(shí),性能不是選擇編程語言的主要驅(qū)動因素。然而,當(dāng)有重要的處理邏輯時(shí),性能是一個主要因素,Scala絕對比Python提供更好的性能,用于針對Spark程序。
2、學(xué)習(xí)曲線
在用Scala語言編寫Spark程序時(shí)有幾個語法糖,所以大數(shù)據(jù)專業(yè)人員在學(xué)習(xí)Spark時(shí)需要非常小心。程序員可能會發(fā)現(xiàn)Scala語法有時(shí)會讓人發(fā)瘋。Scala中的一些庫很難定義隨機(jī)的符號運(yùn)算符,而這些代碼可以由沒有經(jīng)驗(yàn)的程序員理解。在使用Scala時(shí),開發(fā)人員需要關(guān)注代碼的可讀性。與Scala相比,Java或Python是一個靈活的語法復(fù)雜的語言。對Scala開發(fā)人員的需求越來越大,因?yàn)榇髷?shù)據(jù)公司重視能在Spark中掌握數(shù)據(jù)分析和處理的高效而健壯的開發(fā)人員。
Python是為Java程序員學(xué)習(xí)相對容易的因?yàn)樗恼Z法和標(biāo)準(zhǔn)庫。然而,Python是不是一個高度并行和可擴(kuò)展的像SoundCloud或推特系統(tǒng)的理想選擇。
學(xué)習(xí)Scala豐富了程序員對類型系統(tǒng)中各種新抽象的認(rèn)識,新的函數(shù)編程特性和不可變數(shù)據(jù)。
3、并發(fā)性
大數(shù)據(jù)系統(tǒng)的復(fù)雜多樣的基礎(chǔ)結(jié)構(gòu)需要一種編程語言,它有能力集成多個數(shù)據(jù)庫和服務(wù)。在大數(shù)據(jù)的生態(tài)系統(tǒng)中,Scala勝在Play框架提供了許多異步庫和容易集成的各種并發(fā)原語,比如Akka。Scala使開發(fā)人員編寫高效的、可讀性和可維護(hù)性的服務(wù)而不是。相反,Python不支持的重量級進(jìn)程并行在用uWSGI時(shí),但它不支持真正的多線程。
當(dāng)使用Python寫Spark程序時(shí),不管進(jìn)程有多少線程,每次只有一個CPU在Python進(jìn)程中處于活動狀態(tài)。這有助于每個CPU核心只處理一個進(jìn)程,但糟糕的是,每當(dāng)部署新代碼時(shí),需要重新啟動更多的進(jìn)程,還需要額外的內(nèi)存開銷。Scala在這些方面更高效,更容易共事。
4、類型安全
當(dāng)用Spark編程時(shí),開發(fā)人員需要根據(jù)變化的需求不斷地重新編碼代碼。Scala是靜態(tài)類型語言,盡管它看起來像一種動態(tài)類型語言,因?yàn)樗哂袃?yōu)雅的類型推斷機(jī)制。作為靜態(tài)類型語言,Scala仍然提供編譯器來捕獲編譯時(shí)錯誤。
重構(gòu)像Scala這樣的靜態(tài)類型語言的程序代碼比重構(gòu)像Python這樣的動態(tài)語言代碼要容易得多且簡單。開發(fā)人員在修改Python程序代碼后常常會遇到困難,因?yàn)樗斐傻腷ug比修復(fù)程序原有的bug要多。所以最好是緩慢而安全地使用Scala,而不是快速的、死地使用Python。
對于小型的特殊實(shí)驗(yàn),Python是一種有效的選擇,但它并不像靜態(tài)語言那樣有效地?cái)U(kuò)展到大型軟件工程中。
5、易用性
Scala和Python語言在Sparkcontext中有同樣的表達(dá),因此通過使用Scala或Python可以實(shí)現(xiàn)所需的功能。無論哪種方式,程序員都會創(chuàng)建一個Sparkcontext并調(diào)用函數(shù)。Python是一種比Scala更便于用戶使用的語言。Python不那么冗長,開發(fā)人員很容易用Python編寫腳本來調(diào)用Spark。易用性是一個主觀因素,因?yàn)樗Q于程序員的個人偏好。
6、高級特性
Scala編程語言有幾個存在類型、宏和隱式。Scala的晦澀難懂的語法可能很難對開發(fā)人員可能無法理解的高級特性進(jìn)行實(shí)驗(yàn)。然而,Scala的優(yōu)勢在于在重要的框架和庫中使用這些強(qiáng)大的特性。
話雖如此,Scala沒有足夠的數(shù)據(jù)科學(xué)工具和庫,如Python用于機(jī)器學(xué)習(xí)和自然語言處理。Sparkmlib–機(jī)器學(xué)習(xí)庫只有較少的ML算法但他們是理想的大數(shù)據(jù)處理。Scala缺乏良好的可視化和本地?cái)?shù)據(jù)轉(zhuǎn)換。Scala無疑是Spark streaming特性的最佳選擇,因?yàn)镻ython 通過pySpark 調(diào)用Spark.streaming不像Scala那樣先進(jìn)和成熟。
總結(jié)
“Scala速度更快,使用方便 但上手難,而Python則較慢,但很容易使用?!?/p>
Spark框架是用Scala編寫的,所以了解Scala編程語言有助于大數(shù)據(jù)開發(fā)人員輕松地挖掘源代碼,如果某些功能不能像預(yù)期的那樣發(fā)揮作用。使用Python增加了更多問題和bug的可能性,因?yàn)?種不同語言之間的轉(zhuǎn)換是困難的。為Spark使用Scala提供對Spark框架的最新特性的訪問,因?yàn)樗鼈兪紫仍赟cala中可用,然后移植到Python中。
根據(jù)Spark決定Scala和Python取決于最適合項(xiàng)目需要的特性,因?yàn)槊糠N語言都有自己的優(yōu)點(diǎn)和缺點(diǎn)。在使用Apache Spark編程語言之前,開發(fā)者必須學(xué)習(xí)Scala和Python來熟悉它們的特性。學(xué)習(xí)了Python和Scala之后,決定何時(shí)使用Scala來Spark以及何時(shí)使用Python來調(diào)用Spark是相當(dāng)容易的。Apache Spark編程語言的選擇完全取決于要解決的問題。
-
python
+關(guān)注
關(guān)注
56文章
4797瀏覽量
84729 -
scala
+關(guān)注
關(guān)注
0文章
42瀏覽量
6430
發(fā)布評論請先 登錄
相關(guān)推薦
評論