在數據挖掘中,Python和Scala語言都是極受歡迎的,本文總結兩種語言在Spark環境各自特點。
本文翻譯自 https://www.dezyre.com/article/Scala-vs-Python-for-apache-Spark/213
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編程語言的選擇完全取決於要解決的問題。
