大數據時代對編程有什麼影響?
確認
取消
邀請回答
我來回答
|
熱門排序
匿名用戶
中國人民大學夏天解讀大數據時代的編程語言4月9日,中國人民大學信息資源管理學院副教授夏天在CIO時代APP微講座作了題為《大數據時代的編程語言》的主題分享,詳述大數據時代主流編程語言的不同特點,以及...
查看全部
中國人民大學夏天解讀大數據時代的編程語言
4月9日,中國人民大學信息資源管理學院副教授夏天在CIO時代APP微講座作了題為《大數據時代的編程語言》的主題分享,詳述大數據時代主流編程語言的不同特點,以及初學者如何選擇學習一門與大數據有關的編程語言的相關問題。
我們知道,編程語言是大數據分析處理的必備工具,但編程語言的種類和數量非常多。以個人所接觸過的編程語言為例,在過去二十年的時間中,先後學過的語言有Pascal、C語言、C++語言、VisualBasic、ASP、PHP、Java、Python、R語言、Scala等不下十種編程語言,其中Script、Python和Java語言用的較多。此外,還有Ruby、Ada等優秀的語言。這麼多編程語言在大數據處理分析方面常用的有哪些?這些大數據中常用的編程語言各有什麼特點?不同專業背景和興趣愛好的人員如何選擇編程語言的利器來擁抱大數據的挖掘分析?
一、大數據時代數據分析處理常用的編程語言有哪些
為了回答這一問題,從YouTube、Quora和知乎三個重要的社交媒體為例,以編程語言和大數據作為檢索條件,探究有哪些發現。
YouTube檢索結果的第一頁,共有二十條記錄,在這二十條的記錄中,Python出現了8次,R出現了4次,Java出現了3次。我們知道,開源所使用的Hadoop和MapReduce主要是由Java語言編寫而成。因此,如果標題中未直接提到某個具體的編程語言,但又涉及了Hadoop、MapReduce,我們也可歸為Java,那麼,Java總計出現了6次,除此之外,Scala和Ruby各出現了一次。
Quora的檢索結果中主要涉及了Python和R語言為主,也涉及了Java和Scala的相關討論,在bigdata話題下關於Python和R語言的爭論是比較熱門的討論內容。
知乎的檢索結果主要涉及了Java、Python、Scala、R語言、C語言和C++語言,其中以Java和Python為主。
除了上述典型的三個社交媒體之外,還可考慮當前的大數據生態圈。當前的大數據生態圈主要以Hadoop/MapReduce、Spark和Storm為典型代表,而這三個框架無一例外,都是構建在JVM(Java VirtualMachine)——Java虛擬機上,從這個角度來看,Java語言和大數據的關聯最為密切。除此之外,Spark除了Java之外,還提供了Python、Scala和R語言的相關介面。
二、大數據領域四大編程語言的特點
綜合看來,目前大數據分析處理應用最為廣泛的編程語言主要有四種:Java、Python、Scala和R語言。
世界上有一個著名的編程語言排行榜,即TIOBE以反映編程語言的熱門程度。2017年3月的排行中,Java、Python、R語言和Scala分別佔據了第一、第五、第十三和第三十的位置。上圖中反映出近十五年來,Java在絕大多數時間中都佔據了排行榜的首位,足見其本身的流行度。
1.Java
正如前面所提到的,Java是目前編寫大數據的重要語言,我們用的Hadoop、Spark和Storm都是用Java語言編寫而成的,可見Java語言在大數據方面的重要作用。
Java最初由Sun公司的詹姆斯·高斯林開發出來,高斯林長期供職於Sun公司,但Sun公司在2009年被甲骨文收購,高斯林一直對甲骨文公司抱有不滿,並於2010年離開甲骨文加入谷歌,他在離開甲骨文時說:「我所說的都關乎細節與誠實,但吐露真相只會帶來更多的壞處」,「在Sun與甲骨文的併購會議上,到處是有關Sun和谷歌專利的爭吵。甲骨文律師的眼睛閃閃發光。」關於Java的故事雖然鋪滿了傳奇,比如那些不可思議的成功、失之交臂的良機、糾纏不清的官司,但Java本身卻成功地應用在網路計算、移動等各個領域。歷史上從未有像Java這樣可以如此廣泛地被應用的語言和平台。
Java語言如此成功與Java的特點是密切相關的,在Java之前最流行的編程語言是C語言,但C語言的指針處理對普通程序員而言簡直是夢魘,經常會帶來內層泄露問題。因此,高斯林發明Java的一個重要原因便是為了解決C語言的泄露問題和C++兼容C語法而造成的一些歷史遺留問題。Java提出了引用類型,取消了C語言中特殊的指針語法,並通過垃圾自動回收的機制,自動回收不再使用的對象內存。程序員只需創建對象,無需關心如何回收對象,這便使得程序員的犯錯率大大降低,開發效率也大大提升。同時,Java還提出了中間語言和虛擬機的概念,Java程序會先編譯成叫位元組碼的中間語言,再由運行在各操作系統上的Java虛擬機軟體(JVM),在運行時解釋和執行。這樣做的好處是實現了當年Java的口號:一次編寫、到處運行,使得企業可以自由選擇操作系統和伺服器設備,保護了企業的投資。
我們直覺上認為,Java編寫的代碼需要編譯為位元組碼,再由虛擬機來解釋執行,運行速度應該慢於直接編譯為機器碼的語言,如C語言。但人們對Java虛擬機做了大量的優化,使得普通程序員編寫的Java程序遠快於普通程序員編寫的C語言程序,不同水平的Java程序員也能較好的進行團隊協作,開發大型項目,變相降低了企業的人力成本。
Java具有跨平台特性和開放特性,編寫效率相對較高,它屬於強類型的靜態語言,其本身結構非常方便大型項目的組織管理和模塊劃分。因此,畢業於美國斯坦福大學的Hadoop之父DougCutting在編寫Hadoop時選擇了Java語言,這並非偶然。
Java語言的特點人們比較認可的是:簡單性、面向對象、分散式、健壯性、多線程、安全性、可移植性、動態性等特點,當然,其中的簡單、多線程是相對於當時的C語言、C++而言的。總之,Java構成了當前企業大數據計算的基石。
2.Python
1989年的聖誕節期間,在荷蘭的阿姆斯特丹,年輕的Guidovan Rossum為了打發聖誕節的無聊,決定開發一個新的腳本解釋程序,由於他非常喜歡英國六人喜劇團體Monty Python,因此以Python作為腳本名稱。
Python由ABC語言繼承而來,非常適合非程序員來學習使用,普通人員在學習Python時入門非常容易,剛剛提到Java是一門簡單的語言,Python則是「更加簡單」的語言。我們在開始學習Java時,需要配置環境變數、安裝基礎開發環境、編譯運行等,這些基礎工作使得很多人抓狂,甚至成功將很多人嚇跑了。Python要簡單得多,下載安裝之後,在命令行直接輸入Python,便可打開一個解釋器,每執行一行代碼能立即看到輸出結果。因此,初學者非常樂意將Python當作一個強大的科學計算器來使用,體驗Python的強大功能。
Python遵循了優雅、明確、簡單的設計原則,一件事情會有很多種方法,其中會有相對較好的一種。Python開發者的哲學是用一種方法,最好只用一種方法做一件事情,如果有多種選擇,Python開發者會拒絕花哨的語法,而是選擇明確的、沒有歧義的語法。
Python強制使用空格作為邏輯代碼塊的隸屬關係控制,強製程序員養成良好的編程習慣。Python的解釋器中會輸出Python推薦的編寫風格和準則,例如優美勝於醜陋,明了勝於晦澀。在Python顯示器中輸入importthis,便可看到這一系列準則的英文。
經過二十多年的發展,Python已變得非常流行。從早期的各類系統管理任務和web編程,到後來的科學計算和數據分析,Python的應用都比較多。Python的簡潔、易讀和可擴展性使得用Python做科學計算的研究機構日益增多,如卡內基梅隆大學的編程基礎、MIT的計算機科學基編程導論都採用了Python來教授這些課程。此外,眾多開源的科學計算軟體包也都提供了Python調用介面,如著名的圖形庫(OpenCV)、三維可視化庫(VTK),在科學計算和數據分析方面也形成了較為統一的經典擴展庫,如用於快速數組處理的NumPy、數值運算專用的SciPy、圖形繪製的MatplotLib、金融處理方面的Pandas。同時,還有大量的經典圖書採用了Python語言來講解數據挖掘方面的相關理論,如集體智慧編程、社交媒體的數據挖掘與分析等等。
因此,Python的特點可以總結為簡單、優雅、易於擴展、有豐富的科學計算和數據分析擴展庫,非常適合數據科學家來學習使用。
3.R語言
R語言本質上是一款集統計分析和可視化於一體的免費的可跨平台運行的統計軟體。由紐西蘭奧克蘭大學的Robert Gentleman和RossIhaka二人在九十年代初期共同發明,當時兩個人教授一門初等的統計課程,為方便授課開發了這一語言,由於兩個人的名字均以R開頭,因此被稱為R語言。
R語言可以看作是大名鼎鼎的貝爾實驗室所開發的S語言的一種實現。1975年,貝爾實驗室的統計研究部使用了一套文檔齊全的擴充庫來做統計研究,我們稱其為SCS。但SCS在做統計分析時需要大量的編程,有人認為這樣太麻煩,於是貝爾實驗室又開發了一套完整的高級語言系統,即S語言,用於交互。1993年,S語言的許可證被MathSoft公司買斷了,引起了人們的擔憂,而開源的R語言引起了人們的關注。1997年,R語言正式成為GNU項目,大量的優秀統計學家加入了R語言的開發行列。到今天,這一場開源和商業、開放和封閉之爭已塵埃落定,R語言已成為當今最為流行的統計分析工具之一。
和Python類似,R語言的使用也很簡單,直接打開R的交互環境,輸入demo,便可以看到其中的一些例子。因此,初學者可以很快地獲得直觀的感受,增加學習的樂趣,對學習統計知識非常有幫助。
從R語言的發展歷史來看,主要是為統計學家解決數據分析問題而開發的。R的特點是尤其擅長於數據的統計分析。R語言演算法幾乎覆蓋了整個統計領域的前沿演算法,重複性的工作藉助R語言強大的分析能力和排版能力,利用Sweave能得到很好的解決。R本身屬於統計編程類語言,受到其演算法架構的通用性和速度、性能等方面的影響,最開始的設計完全是基於單線程和內存計算完成。因此,在處理大規模數據時顯得力不從心,好在R有一些優秀的擴展,能在一定程度上解決這些問題。如SparkR、RHadoop等等。
4.Scala語言
我們知道,偉大的Java促進了今日信息技術的輝煌,Java支撐了大量的企業級關鍵應用,如web站點、手機應用等等。但人們一直期待Java的重大改進和更新換代,使其吸收其他語言的長處,進一步提升生產效率。而Scala不僅在「更好的Java」方面做得非常成功,而且在並發編程、大數據處理、科學計算方面都取得了不錯的效果。
Scala由瑞士的聯邦理工學院Martin Odersky在2003年開始設計,在此之前,他已經因對Java的優化而聞名於世,Scala是其又一成名之作。正如其名,Scala本身是一門可擴展的語言,其中有靜態運行、面向對象編程、函數式編程、類型推導、高階函數等眾多特性。Scala語言非常經典,相同的功能用Scala實現,代碼量能達到Java的百分之二十左右。Scala不僅可以做到更好的Java,而且在數據統計分析方面,原先Python和R語言獨具的一些統計分析模塊,已經有越來越多的Scala實現,例如Breeze、Spark data frame、Zeppelin。我們知道以前的數據分析書籍大多由Python語言寫成,現在也有許多用Scala進行數據分析和機器學習的書籍,如Scala Data Analysis Cookbook、Scala for Machine Learning。
Scala可以無縫銜接原有的Java庫,充分地利用現有的Java資源,在大數據並行分析處理方面更是獨具優勢。因此,很多大數據平台都選擇Scala作為首要的實現語言和API介面語言。
個人認為,Scala最主要的特點是非常靈活,以至於初學者的學習曲線比較陡峭,但Scala很好地將Java的面向對象編程方法與Haskell函數式編程思想揉在一起,其中體現的現代化編程思想值得程序設計人員深入的學習和體會。
這四種編程語言各有各的優點,但有人的地方便有爭論,這裡的爭論焦點主要集中於R和Python間的選擇問題。其實,通過這兩種語言的官網介紹,便可以看出他們的定位並不完全一致,Python是一種通用的編程語言,除數據分析外在很多領域都有廣泛的應用,R的定位是「用於統計計算的免費軟體環境」。
三、初學者如何選擇大數據編程語言
工欲善其事必先利其器,對於奮戰在大數據處理和分析前沿的人員而言,手中應有一把使用自如的快刀,當面對上述四種各有特色的編程語言應如何選擇?
在Quora上,有人提到,對於數據工程推薦使用Java和Scala,對於數據科學推薦使用Python和R語言,個人覺得很有道理。如果你是一個統計學家,並沒有太多的計算機科學背景,R應該是一個很不錯的選擇;如果接受過較為系統的程序設計訓練,又想從事數據分析方面的工作,Python應該是不錯的選擇;如果我們要做大數據產品、大數據具體項目,或者想深入了解現在大數據框架底層的運行機制,那學習Java是必不可少的基本要求;對於Scala語言,如果你是一個熟練的Java工程師,厭倦了Java的冗餘繁瑣,嚮往美好的函數式編程、嚮往Python的簡潔優雅、嚮往R語言的強大統計功能,可以選擇Scala。Scala還有一個額外的好處,用Scala寫的程序代碼初級程序員很難看懂,也不敢隨意修改,便不用擔心在團隊協作時精心編寫的代碼被一些初級程序員改錯。
當然,個人認為,編程語言並沒有高低貴賤和優劣之分,各有各的優點,如果你有興趣和能力,不妨將各種語言都實踐一遍,尤其是側重於大數據工程的技術人員,在學好一門重量級的語言,如Java語言,與此同時,掌握一門Python或R語言對於開拓自己的視野、學習數據分析的理論、閱讀相關的書籍都是大有裨益的。
中國人民大學夏天解讀大數據時代的編程語言
4月9日,中國人民大學信息資源管理學院副教授夏天在CIO時代APP微講座作了題為《大數據時代的編程語言》的主題分享,詳述大數據時代主流編程語言的不同特點,以及初學者如何選擇學習一門與大數據有關的編程語言的相關問題。
我們知道,編程語言是大數據分析處理的必備工具,但編程語言的種類和數量非常多。以個人所接觸過的編程語言為例,在過去二十年的時間中,先後學過的語言有Pascal、C語言、C++語言、VisualBasic、ASP、PHP、Java、Python、R語言、Scala等不下十種編程語言,其中Script、Python和Java語言用的較多。此外,還有Ruby、Ada等優秀的語言。這麼多編程語言在大數據處理分析方面常用的有哪些?這些大數據中常用的編程語言各有什麼特點?不同專業背景和興趣愛好的人員如何選擇編程語言的利器來擁抱大數據的挖掘分析?
一、大數據時代數據分析處理常用的編程語言有哪些
為了回答這一問題,從YouTube、Quora和知乎三個重要的社交媒體為例,以編程語言和大數據作為檢索條件,探究有哪些發現。
YouTube檢索結果的第一頁,共有二十條記錄,在這二十條的記錄中,Python出現了8次,R出現了4次,Java出現了3次。我們知道,開源所使用的Hadoop和MapReduce主要是由Java語言編寫而成。因此,如果標題中未直接提到某個具體的編程語言,但又涉及了Hadoop、MapReduce,我們也可歸為Java,那麼,Java總計出現了6次,除此之外,Scala和Ruby各出現了一次。
Quora的檢索結果中主要涉及了Python和R語言為主,也涉及了Java和Scala的相關討論,在bigdata話題下關於Python和R語言的爭論是比較熱門的討論內容。
知乎的檢索結果主要涉及了Java、Python、Scala、R語言、C語言和C++語言,其中以Java和Python為主。
除了上述典型的三個社交媒體之外,還可考慮當前的大數據生態圈。當前的大數據生態圈主要以Hadoop/MapReduce、Spark和Storm為典型代表,而這三個框架無一例外,都是構建在JVM(Java VirtualMachine)——Java虛擬機上,從這個角度來看,Java語言和大數據的關聯最為密切。除此之外,Spark除了Java之外,還提供了Python、Scala和R語言的相關介面。
二、大數據領域四大編程語言的特點
綜合看來,目前大數據分析處理應用最為廣泛的編程語言主要有四種:Java、Python、Scala和R語言。
世界上有一個著名的編程語言排行榜,即TIOBE以反映編程語言的熱門程度。2017年3月的排行中,Java、Python、R語言和Scala分別佔據了第一、第五、第十三和第三十的位置。上圖中反映出近十五年來,Java在絕大多數時間中都佔據了排行榜的首位,足見其本身的流行度。
1.Java
正如前面所提到的,Java是目前編寫大數據的重要語言,我們用的Hadoop、Spark和Storm都是用Java語言編寫而成的,可見Java語言在大數據方面的重要作用。
Java最初由Sun公司的詹姆斯·高斯林開發出來,高斯林長期供職於Sun公司,但Sun公司在2009年被甲骨文收購,高斯林一直對甲骨文公司抱有不滿,並於2010年離開甲骨文加入谷歌,他在離開甲骨文時說:「我所說的都關乎細節與誠實,但吐露真相只會帶來更多的壞處」,「在Sun與甲骨文的併購會議上,到處是有關Sun和谷歌專利的爭吵。甲骨文律師的眼睛閃閃發光。」關於Java的故事雖然鋪滿了傳奇,比如那些不可思議的成功、失之交臂的良機、糾纏不清的官司,但Java本身卻成功地應用在網路計算、移動等各個領域。歷史上從未有像Java這樣可以如此廣泛地被應用的語言和平台。
Java語言如此成功與Java的特點是密切相關的,在Java之前最流行的編程語言是C語言,但C語言的指針處理對普通程序員而言簡直是夢魘,經常會帶來內層泄露問題。因此,高斯林發明Java的一個重要原因便是為了解決C語言的泄露問題和C++兼容C語法而造成的一些歷史遺留問題。Java提出了引用類型,取消了C語言中特殊的指針語法,並通過垃圾自動回收的機制,自動回收不再使用的對象內存。程序員只需創建對象,無需關心如何回收對象,這便使得程序員的犯錯率大大降低,開發效率也大大提升。同時,Java還提出了中間語言和虛擬機的概念,Java程序會先編譯成叫位元組碼的中間語言,再由運行在各操作系統上的Java虛擬機軟體(JVM),在運行時解釋和執行。這樣做的好處是實現了當年Java的口號:一次編寫、到處運行,使得企業可以自由選擇操作系統和伺服器設備,保護了企業的投資。
我們直覺上認為,Java編寫的代碼需要編譯為位元組碼,再由虛擬機來解釋執行,運行速度應該慢於直接編譯為機器碼的語言,如C語言。但人們對Java虛擬機做了大量的優化,使得普通程序員編寫的Java程序遠快於普通程序員編寫的C語言程序,不同水平的Java程序員也能較好的進行團隊協作,開發大型項目,變相降低了企業的人力成本。
Java具有跨平台特性和開放特性,編寫效率相對較高,它屬於強類型的靜態語言,其本身結構非常方便大型項目的組織管理和模塊劃分。因此,畢業於美國斯坦福大學的Hadoop之父DougCutting在編寫Hadoop時選擇了Java語言,這並非偶然。
Java語言的特點人們比較認可的是:簡單性、面向對象、分散式、健壯性、多線程、安全性、可移植性、動態性等特點,當然,其中的簡單、多線程是相對於當時的C語言、C++而言的。總之,Java構成了當前企業大數據計算的基石。
2.Python
1989年的聖誕節期間,在荷蘭的阿姆斯特丹,年輕的Guidovan Rossum為了打發聖誕節的無聊,決定開發一個新的腳本解釋程序,由於他非常喜歡英國六人喜劇團體Monty Python,因此以Python作為腳本名稱。
Python由ABC語言繼承而來,非常適合非程序員來學習使用,普通人員在學習Python時入門非常容易,剛剛提到Java是一門簡單的語言,Python則是「更加簡單」的語言。我們在開始學習Java時,需要配置環境變數、安裝基礎開發環境、編譯運行等,這些基礎工作使得很多人抓狂,甚至成功將很多人嚇跑了。Python要簡單得多,下載安裝之後,在命令行直接輸入Python,便可打開一個解釋器,每執行一行代碼能立即看到輸出結果。因此,初學者非常樂意將Python當作一個強大的科學計算器來使用,體驗Python的強大功能。
Python遵循了優雅、明確、簡單的設計原則,一件事情會有很多種方法,其中會有相對較好的一種。Python開發者的哲學是用一種方法,最好只用一種方法做一件事情,如果有多種選擇,Python開發者會拒絕花哨的語法,而是選擇明確的、沒有歧義的語法。
Python強制使用空格作為邏輯代碼塊的隸屬關係控制,強製程序員養成良好的編程習慣。Python的解釋器中會輸出Python推薦的編寫風格和準則,例如優美勝於醜陋,明了勝於晦澀。在Python顯示器中輸入importthis,便可看到這一系列準則的英文。
經過二十多年的發展,Python已變得非常流行。從早期的各類系統管理任務和web編程,到後來的科學計算和數據分析,Python的應用都比較多。Python的簡潔、易讀和可擴展性使得用Python做科學計算的研究機構日益增多,如卡內基梅隆大學的編程基礎、MIT的計算機科學基編程導論都採用了Python來教授這些課程。此外,眾多開源的科學計算軟體包也都提供了Python調用介面,如著名的圖形庫(OpenCV)、三維可視化庫(VTK),在科學計算和數據分析方面也形成了較為統一的經典擴展庫,如用於快速數組處理的NumPy、數值運算專用的SciPy、圖形繪製的MatplotLib、金融處理方面的Pandas。同時,還有大量的經典圖書採用了Python語言來講解數據挖掘方面的相關理論,如集體智慧編程、社交媒體的數據挖掘與分析等等。
因此,Python的特點可以總結為簡單、優雅、易於擴展、有豐富的科學計算和數據分析擴展庫,非常適合數據科學家來學習使用。
3.R語言
R語言本質上是一款集統計分析和可視化於一體的免費的可跨平台運行的統計軟體。由紐西蘭奧克蘭大學的Robert Gentleman和RossIhaka二人在九十年代初期共同發明,當時兩個人教授一門初等的統計課程,為方便授課開發了這一語言,由於兩個人的名字均以R開頭,因此被稱為R語言。
R語言可以看作是大名鼎鼎的貝爾實驗室所開發的S語言的一種實現。1975年,貝爾實驗室的統計研究部使用了一套文檔齊全的擴充庫來做統計研究,我們稱其為SCS。但SCS在做統計分析時需要大量的編程,有人認為這樣太麻煩,於是貝爾實驗室又開發了一套完整的高級語言系統,即S語言,用於交互。1993年,S語言的許可證被MathSoft公司買斷了,引起了人們的擔憂,而開源的R語言引起了人們的關注。1997年,R語言正式成為GNU項目,大量的優秀統計學家加入了R語言的開發行列。到今天,這一場開源和商業、開放和封閉之爭已塵埃落定,R語言已成為當今最為流行的統計分析工具之一。
和Python類似,R語言的使用也很簡單,直接打開R的交互環境,輸入demo,便可以看到其中的一些例子。因此,初學者可以很快地獲得直觀的感受,增加學習的樂趣,對學習統計知識非常有幫助。
從R語言的發展歷史來看,主要是為統計學家解決數據分析問題而開發的。R的特點是尤其擅長於數據的統計分析。R語言演算法幾乎覆蓋了整個統計領域的前沿演算法,重複性的工作藉助R語言強大的分析能力和排版能力,利用Sweave能得到很好的解決。R本身屬於統計編程類語言,受到其演算法架構的通用性和速度、性能等方面的影響,最開始的設計完全是基於單線程和內存計算完成。因此,在處理大規模數據時顯得力不從心,好在R有一些優秀的擴展,能在一定程度上解決這些問題。如SparkR、RHadoop等等。
4.Scala語言
我們知道,偉大的Java促進了今日信息技術的輝煌,Java支撐了大量的企業級關鍵應用,如web站點、手機應用等等。但人們一直期待Java的重大改進和更新換代,使其吸收其他語言的長處,進一步提升生產效率。而Scala不僅在「更好的Java」方面做得非常成功,而且在並發編程、大數據處理、科學計算方面都取得了不錯的效果。
Scala由瑞士的聯邦理工學院Martin Odersky在2003年開始設計,在此之前,他已經因對Java的優化而聞名於世,Scala是其又一成名之作。正如其名,Scala本身是一門可擴展的語言,其中有靜態運行、面向對象編程、函數式編程、類型推導、高階函數等眾多特性。Scala語言非常經典,相同的功能用Scala實現,代碼量能達到Java的百分之二十左右。Scala不僅可以做到更好的Java,而且在數據統計分析方面,原先Python和R語言獨具的一些統計分析模塊,已經有越來越多的Scala實現,例如Breeze、Spark data frame、Zeppelin。我們知道以前的數據分析書籍大多由Python語言寫成,現在也有許多用Scala進行數據分析和機器學習的書籍,如Scala Data Analysis Cookbook、Scala for Machine Learning。
Scala可以無縫銜接原有的Java庫,充分地利用現有的Java資源,在大數據並行分析處理方面更是獨具優勢。因此,很多大數據平台都選擇Scala作為首要的實現語言和API介面語言。
個人認為,Scala最主要的特點是非常靈活,以至於初學者的學習曲線比較陡峭,但Scala很好地將Java的面向對象編程方法與Haskell函數式編程思想揉在一起,其中體現的現代化編程思想值得程序設計人員深入的學習和體會。
這四種編程語言各有各的優點,但有人的地方便有爭論,這裡的爭論焦點主要集中於R和Python間的選擇問題。其實,通過這兩種語言的官網介紹,便可以看出他們的定位並不完全一致,Python是一種通用的編程語言,除數據分析外在很多領域都有廣泛的應用,R的定位是「用於統計計算的免費軟體環境」。
三、初學者如何選擇大數據編程語言
工欲善其事必先利其器,對於奮戰在大數據處理和分析前沿的人員而言,手中應有一把使用自如的快刀,當面對上述四種各有特色的編程語言應如何選擇?
在Quora上,有人提到,對於數據工程推薦使用Java和Scala,對於數據科學推薦使用Python和R語言,個人覺得很有道理。如果你是一個統計學家,並沒有太多的計算機科學背景,R應該是一個很不錯的選擇;如果接受過較為系統的程序設計訓練,又想從事數據分析方面的工作,Python應該是不錯的選擇;如果我們要做大數據產品、大數據具體項目,或者想深入了解現在大數據框架底層的運行機制,那學習Java是必不可少的基本要求;對於Scala語言,如果你是一個熟練的Java工程師,厭倦了Java的冗餘繁瑣,嚮往美好的函數式編程、嚮往Python的簡潔優雅、嚮往R語言的強大統計功能,可以選擇Scala。Scala還有一個額外的好處,用Scala寫的程序代碼初級程序員很難看懂,也不敢隨意修改,便不用擔心在團隊協作時精心編寫的代碼被一些初級程序員改錯。
當然,個人認為,編程語言並沒有高低貴賤和優劣之分,各有各的優點,如果你有興趣和能力,不妨將各種語言都實踐一遍,尤其是側重於大數據工程的技術人員,在學好一門重量級的語言,如Java語言,與此同時,掌握一門Python或R語言對於開拓自己的視野、學習數據分析的理論、閱讀相關的書籍都是大有裨益的。
推薦閱讀:
※Go 語法糖水 - 單元測試
※偽·從零開始學Python - 1.3 Python Shell的基本使用
※使用subst命令快速跳轉到工作間
※從零開始手敲次世代遊戲引擎(四十一)
※加碼編程,少年創學院尋找新業務增長點