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