我應(yīng)該使用哪種該死的大數(shù)據(jù)編程語言?

你有一個大數(shù)據(jù)項目。您了解問題域,您知道要使用什么基礎(chǔ)結(jié)構(gòu),也許您甚至已經(jīng)決定了處理所有這些數(shù)據(jù)的框架,但是有一個決策迫在眉睫:我應(yīng)該選擇哪種語言?(或者更有針對性:我應(yīng)該用什么語言來迫使我的所有開發(fā)人員和數(shù)據(jù)科學家受苦?)這個問題只能拖這么久。

當然,沒有什么可以阻止您使用(比如XSLT轉(zhuǎn)換)來處理大數(shù)據(jù)(這是一個很好的4月傻瓜對明天的建議,只是為了查看每個人臉上的表情)。但總的來說,現(xiàn)在有三種大數(shù)據(jù)語言可供選擇-R、Python和Scala-加上Java的長期強大的企業(yè)烏龜。你應(yīng)該選擇哪種語言?為什么.或者什么時候?

下面列出每一項,以幫助指導您的決定。

R

r常被稱為“統(tǒng)計學家為統(tǒng)計人員建立的語言”。如果你需要一個深奧的統(tǒng)計模型來計算,你可能會發(fā)現(xiàn)克拉恩-這不是沒有意義的綜合R檔案館網(wǎng)絡(luò),你知道的為了分析和策劃,你無法戰(zhàn)勝gggplot 2..如果你需要利用你的機器所能提供的更多的能量,你可以使用SparkR綁定來運行R上的星火。

然而,如果你不是一個數(shù)據(jù)科學家,而且以前沒有使用過Matlab,SAS,或者八度音階,那么在R中,它可能需要一些調(diào)整才能產(chǎn)生效果,雖然它對數(shù)據(jù)分析很有用,但是它在更一般的用途上不太好。您可以在R中構(gòu)建一個模型,但是您會考慮將模型轉(zhuǎn)換為Scala或Python以供生產(chǎn),并且您不太可能使用該語言編寫集群控制系統(tǒng)(如果您使用該語言進行調(diào)試,那么祝您好運)。

Python

如果你的數(shù)據(jù)科學家不做R,他們可能知道Python的內(nèi)外。Python在學術(shù)界已經(jīng)流行了十多年,特別是在自然語言處理(NLP)等領(lǐng)域。因此,如果您有一個需要NLP工作的項目,您將面臨許多令人尷尬的選擇,包括經(jīng)典的NTLK,主題建模根辛,或燃燒的-快速和準確空間..類似地,Python在神經(jīng)網(wǎng)絡(luò)方面的作用遠遠超過了它的重量。西亞諾和TensorFlow然后科學-學習用于機器學習,以及NumPy和熊貓用于數(shù)據(jù)分析。

有Juypter/IPython也是-基于網(wǎng)絡(luò)的筆記本服務(wù)器,它允許你將代碼、情節(jié),以及幾乎任何東西,以可共享的日志格式混合在一起。這是Python的致命特性之一,盡管這些天來,這個概念被證明是非常有用的,以至于它已經(jīng)擴展到幾乎所有具有讀-評估-打印-循環(huán)(Repl)概念的語言中,包括Scala和R。

Python往往在大數(shù)據(jù)處理框架中得到支持,但同時,它往往不是一流的公民。例如,SPark中的新特性幾乎總是出現(xiàn)在Scala/Java綁定的頂部,在PySPark中提供這些更新可能需要幾個較小的版本(特別是在SPark流/MLLib開發(fā)方面)。

相對于R,Python是一種傳統(tǒng)的面向?qū)ο笳Z言,所以大多數(shù)開發(fā)人員都會很樂意使用它,而第一次接觸R或Scala可能會很嚇人。一個輕微的問題是要求正確的白間距在您的代碼。這將人們分為“這對增強可讀性很好”和我們中的一些人,他們認為在2016年,我們不應(yīng)該為了讓程序運行而與解釋器搏斗,因為一行字符不合適(你可能會猜到我在這個問題上的立場)。

Scala

啊,Scala-在本文中的四種語言中,Scala是一種可以毫不費力地靠在墻上的語言,每個人都很欣賞它的類型系統(tǒng)。運行在jvm上,Scala是功能和面向?qū)ο蟮姆独慕Y(jié)合體,目前它在金融界和需要對大量數(shù)據(jù)進行操作的公司取得了巨大的進步,通常是以大規(guī)模分布式的方式(如twitter和linkedin)。這也是驅(qū)動兩者的語言火花和卡夫卡.

當它在JVM中運行時,它立即可以免費訪問Java生態(tài)系統(tǒng),但它也有各種各樣的“本地”庫,用于大規(guī)模地處理數(shù)據(jù)(特別是Twitter的代數(shù)鳥和蘇明鳥)。它還包括一個非常方便的用于交互開發(fā)和分析的REPL,如Python和R。

我非常喜歡Scala,如果您說不出的話,因為它包含了許多有用的編程特性,比如模式匹配,并且比標準Java少得多。然而,在Scala中通常有不止一種方法來完成某些事情,而這種語言將此作為一種特性來宣傳。那就太好了!但是考慮到它有一個圖靈全的類型系統(tǒng)和各種各樣的雜亂無章的操作符(‘/:’forfoldLeft和“:”代表foldRight),很容易打開Scala文件,并認為您正在查看一個特別討厭的Perl。在編寫Scala時需要遵循一組良好的實踐和準則(數(shù)據(jù)庫是合理的).

另一個缺點是:Scala編譯器有點慢,以至于它使經(jīng)典的“編譯!”xkcd帶..盡管如此,它還是有REPL、大數(shù)據(jù)支持和基于Web的筆記本,以木星和齊柏林飛艇的形式存在,所以我原諒它的許多怪癖。

Java

最后,總是有Java-不受人喜愛,孤立無援,由一家公司擁有,這家公司似乎只關(guān)心通過起訴谷歌賺到錢,而且完全不時尚。企業(yè)中只有無人機使用Java!然而,Java可能非常適合您的大數(shù)據(jù)項目??紤]HadoopMapReduce-Java。HDFS?用Java寫的。甚至Storm、Kafka和SPark也運行在JVM上(在Clojure和Scala中),這意味著Java是這些項目的頭等公民。還有一些新技術(shù),比如GoogleCloudDataflow(現(xiàn)在)阿帕奇梁),直到最近才支持Java。

Java可能不是忍者搖滾明星的首選語言。但是,當他們努力在node.js應(yīng)用程序中整理回調(diào)的巢時,使用Java可以讓您訪問一個大型的分析器、調(diào)試器、監(jiān)視工具、企業(yè)安全和互操作性庫,以及更多的,其中大多數(shù)都經(jīng)過了戰(zhàn)斗測試。在過去的二十年里..(各位,對不起,Java今年21歲了,我們都老了。)

針對Java的主要抱怨是嚴重的冗長和缺乏用于迭代開發(fā)的REPL(出現(xiàn)在R、Python和Scala中)。我已經(jīng)看到了10行基于Scala的星條旗代碼氣球變成了Java中的200行怪物,完成了占據(jù)大部分屏幕的大型類型語句。然而,Java 8中新的lambda支持為糾正這種情況做了很多工作。Java永遠不會像Scala那樣緊湊,但是Java 8確實減少了Java開發(fā)的痛苦。

至于REPL?好吧,你把我弄過去了-不管怎么說,現(xiàn)在。Java 9(明年推出)將包括JShell滿足你所有的REPL需求。

鼓聲,謝謝

大數(shù)據(jù)項目應(yīng)該使用哪種語言?恐怕我要從懦夫那里走出去,堅定地站在“看情況而定”的一邊。如果你用晦澀的統(tǒng)計計算來做大量的數(shù)據(jù)分析,那么如果你在進行NLP或跨GPU的密集神經(jīng)網(wǎng)絡(luò)處理,那么你會瘋狂地不喜歡R,那么Python是一個很好的選擇。對于擁有所有重要操作工具的成熟的生產(chǎn)流解決方案來說,Java或Scala無疑是很好的選擇。

當然,它不一定非得是(或)。例如,使用SPark,您可以使用R或Python對模型和機器學習管道進行靜態(tài)數(shù)據(jù)培訓,然后將該管道序列化到存儲中,在那里可以由ProductionScalaSPark流應(yīng)用程序使用。雖然您不應(yīng)該過火(否則您的團隊很快就會遭受語言疲勞),但是使用一組能夠發(fā)揮特定優(yōu)勢的異構(gòu)語言可以為大數(shù)據(jù)項目帶來好處。

未來注定是信息的時代,所以掌握一門編程語言還是非常重要的!

學習從來不是一個人的事情,要有個相互監(jiān)督的伙伴,工作需要學習python或者有興趣學習python的伙伴可以私信回復(fù)小編“學習” 獲取資料,一起學習

文章來源:infoword

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容