你有一個(gè)大數(shù)據(jù)項(xiàng)目。您了解問(wèn)題域,您知道要使用什么基礎(chǔ)結(jié)構(gòu),也許您甚至已經(jīng)決定了處理所有這些數(shù)據(jù)的框架,但是有一個(gè)決策迫在眉睫:我應(yīng)該選擇哪種語(yǔ)言?(或者更有針對(duì)性:我應(yīng)該用什么語(yǔ)言來(lái)迫使我的所有開(kāi)發(fā)人員和數(shù)據(jù)科學(xué)家受苦?)這個(gè)問(wèn)題只能拖這么久。
當(dāng)然,沒(méi)有什么可以阻止您使用(比如XSLT轉(zhuǎn)換)來(lái)處理大數(shù)據(jù)(這是一個(gè)很好的4月傻瓜對(duì)明天的建議,只是為了查看每個(gè)人臉上的表情)。但總的來(lái)說(shuō),現(xiàn)在有三種大數(shù)據(jù)語(yǔ)言可供選擇-R、Python和Scala-加上Java的長(zhǎng)期強(qiáng)大的企業(yè)烏龜。你應(yīng)該選擇哪種語(yǔ)言?為什么.或者什么時(shí)候?
下面列出每一項(xiàng),以幫助指導(dǎo)您的決定。
R
r常被稱為“統(tǒng)計(jì)學(xué)家為統(tǒng)計(jì)人員建立的語(yǔ)言”。如果你需要一個(gè)深?yuàn)W的統(tǒng)計(jì)模型來(lái)計(jì)算,你可能會(huì)發(fā)現(xiàn)克拉恩-這不是沒(méi)有意義的綜合R檔案館網(wǎng)絡(luò),你知道的為了分析和策劃,你無(wú)法戰(zhàn)勝gggplot 2..如果你需要利用你的機(jī)器所能提供的更多的能量,你可以使用SparkR綁定來(lái)運(yùn)行R上的星火。
然而,如果你不是一個(gè)數(shù)據(jù)科學(xué)家,而且以前沒(méi)有使用過(guò)Matlab,SAS,或者八度音階,那么在R中,它可能需要一些調(diào)整才能產(chǎn)生效果,雖然它對(duì)數(shù)據(jù)分析很有用,但是它在更一般的用途上不太好。您可以在R中構(gòu)建一個(gè)模型,但是您會(huì)考慮將模型轉(zhuǎn)換為Scala或Python以供生產(chǎn),并且您不太可能使用該語(yǔ)言編寫(xiě)集群控制系統(tǒng)(如果您使用該語(yǔ)言進(jìn)行調(diào)試,那么祝您好運(yùn))。
Python
如果你的數(shù)據(jù)科學(xué)家不做R,他們可能知道Python的內(nèi)外。Python在學(xué)術(shù)界已經(jīng)流行了十多年,特別是在自然語(yǔ)言處理(NLP)等領(lǐng)域。因此,如果您有一個(gè)需要NLP工作的項(xiàng)目,您將面臨許多令人尷尬的選擇,包括經(jīng)典的NTLK,主題建模根辛,或燃燒的-快速和準(zhǔn)確空間..類(lèi)似地,Python在神經(jīng)網(wǎng)絡(luò)方面的作用遠(yuǎn)遠(yuǎn)超過(guò)了它的重量。西亞諾和TensorFlow然后科學(xué)-學(xué)習(xí)用于機(jī)器學(xué)習(xí),以及NumPy和熊貓用于數(shù)據(jù)分析。
有Juypter/IPython也是-基于網(wǎng)絡(luò)的筆記本服務(wù)器,它允許你將代碼、情節(jié),以及幾乎任何東西,以可共享的日志格式混合在一起。這是Python的致命特性之一,盡管這些天來(lái),這個(gè)概念被證明是非常有用的,以至于它已經(jīng)擴(kuò)展到幾乎所有具有讀-評(píng)估-打印-循環(huán)(Repl)概念的語(yǔ)言中,包括Scala和R。
Python往往在大數(shù)據(jù)處理框架中得到支持,但同時(shí),它往往不是一流的公民。例如,SPark中的新特性幾乎總是出現(xiàn)在Scala/Java綁定的頂部,在PySPark中提供這些更新可能需要幾個(gè)較小的版本(特別是在SPark流/MLLib開(kāi)發(fā)方面)。
相對(duì)于R,Python是一種傳統(tǒng)的面向?qū)ο笳Z(yǔ)言,所以大多數(shù)開(kāi)發(fā)人員都會(huì)很樂(lè)意使用它,而第一次接觸R或Scala可能會(huì)很?chē)樔?。一個(gè)輕微的問(wèn)題是要求正確的白間距在您的代碼。這將人們分為“這對(duì)增強(qiáng)可讀性很好”和我們中的一些人,他們認(rèn)為在2016年,我們不應(yīng)該為了讓程序運(yùn)行而與解釋器搏斗,因?yàn)橐恍凶址缓线m(你可能會(huì)猜到我在這個(gè)問(wèn)題上的立場(chǎng))。
Scala
啊,Scala-在本文中的四種語(yǔ)言中,Scala是一種可以毫不費(fèi)力地靠在墻上的語(yǔ)言,每個(gè)人都很欣賞它的類(lèi)型系統(tǒng)。運(yùn)行在jvm上,Scala是功能和面向?qū)ο蟮姆独慕Y(jié)合體,目前它在金融界和需要對(duì)大量數(shù)據(jù)進(jìn)行操作的公司取得了巨大的進(jìn)步,通常是以大規(guī)模分布式的方式(如twitter和linkedin)。這也是驅(qū)動(dòng)兩者的語(yǔ)言火花和卡夫卡.
當(dāng)它在JVM中運(yùn)行時(shí),它立即可以免費(fèi)訪問(wèn)Java生態(tài)系統(tǒng),但它也有各種各樣的“本地”庫(kù),用于大規(guī)模地處理數(shù)據(jù)(特別是Twitter的代數(shù)鳥(niǎo)和蘇明鳥(niǎo))。它還包括一個(gè)非常方便的用于交互開(kāi)發(fā)和分析的REPL,如Python和R。
我非常喜歡Scala,如果您說(shuō)不出的話,因?yàn)樗嗽S多有用的編程特性,比如模式匹配,并且比標(biāo)準(zhǔn)Java少得多。然而,在Scala中通常有不止一種方法來(lái)完成某些事情,而這種語(yǔ)言將此作為一種特性來(lái)宣傳。那就太好了!但是考慮到它有一個(gè)圖靈全的類(lèi)型系統(tǒng)和各種各樣的雜亂無(wú)章的操作符(‘/:’forfoldLeft和“:”代表foldRight),很容易打開(kāi)Scala文件,并認(rèn)為您正在查看一個(gè)特別討厭的Perl。在編寫(xiě)Scala時(shí)需要遵循一組良好的實(shí)踐和準(zhǔn)則(數(shù)據(jù)庫(kù)是合理的).
另一個(gè)缺點(diǎn)是:Scala編譯器有點(diǎn)慢,以至于它使經(jīng)典的“編譯!”xkcd帶..盡管如此,它還是有REPL、大數(shù)據(jù)支持和基于Web的筆記本,以木星和齊柏林飛艇的形式存在,所以我原諒它的許多怪癖。
Java
最后,總是有Java-不受人喜愛(ài),孤立無(wú)援,由一家公司擁有,這家公司似乎只關(guān)心通過(guò)起訴谷歌賺到錢(qián),而且完全不時(shí)尚。企業(yè)中只有無(wú)人機(jī)使用Java!然而,Java可能非常適合您的大數(shù)據(jù)項(xiàng)目。考慮HadoopMapReduce-Java。HDFS?用Java寫(xiě)的。甚至Storm、Kafka和SPark也運(yùn)行在JVM上(在Clojure和Scala中),這意味著Java是這些項(xiàng)目的頭等公民。還有一些新技術(shù),比如GoogleCloudDataflow(現(xiàn)在)阿帕奇梁),直到最近才支持Java。
Java可能不是忍者搖滾明星的首選語(yǔ)言。但是,當(dāng)他們努力在node.js應(yīng)用程序中整理回調(diào)的巢時(shí),使用Java可以讓您訪問(wèn)一個(gè)大型的分析器、調(diào)試器、監(jiān)視工具、企業(yè)安全和互操作性庫(kù),以及更多的,其中大多數(shù)都經(jīng)過(guò)了戰(zhàn)斗測(cè)試。在過(guò)去的二十年里..(各位,對(duì)不起,Java今年21歲了,我們都老了。)
針對(duì)Java的主要抱怨是嚴(yán)重的冗長(zhǎng)和缺乏用于迭代開(kāi)發(fā)的REPL(出現(xiàn)在R、Python和Scala中)。我已經(jīng)看到了10行基于Scala的星條旗代碼氣球變成了Java中的200行怪物,完成了占據(jù)大部分屏幕的大型類(lèi)型語(yǔ)句。然而,Java 8中新的lambda支持為糾正這種情況做了很多工作。Java永遠(yuǎn)不會(huì)像Scala那樣緊湊,但是Java 8確實(shí)減少了Java開(kāi)發(fā)的痛苦。
至于REPL?好吧,你把我弄過(guò)去了-不管怎么說(shuō),現(xiàn)在。Java 9(明年推出)將包括JShell滿足你所有的REPL需求。
鼓聲,謝謝
大數(shù)據(jù)項(xiàng)目應(yīng)該使用哪種語(yǔ)言?恐怕我要從懦夫那里走出去,堅(jiān)定地站在“看情況而定”的一邊。如果你用晦澀的統(tǒng)計(jì)計(jì)算來(lái)做大量的數(shù)據(jù)分析,那么如果你在進(jìn)行NLP或跨GPU的密集神經(jīng)網(wǎng)絡(luò)處理,那么你會(huì)瘋狂地不喜歡R,那么Python是一個(gè)很好的選擇。對(duì)于擁有所有重要操作工具的成熟的生產(chǎn)流解決方案來(lái)說(shuō),Java或Scala無(wú)疑是很好的選擇。
當(dāng)然,它不一定非得是(或)。例如,使用SPark,您可以使用R或Python對(duì)模型和機(jī)器學(xué)習(xí)管道進(jìn)行靜態(tài)數(shù)據(jù)培訓(xùn),然后將該管道序列化到存儲(chǔ)中,在那里可以由ProductionScalaSPark流應(yīng)用程序使用。雖然您不應(yīng)該過(guò)火(否則您的團(tuán)隊(duì)很快就會(huì)遭受語(yǔ)言疲勞),但是使用一組能夠發(fā)揮特定優(yōu)勢(shì)的異構(gòu)語(yǔ)言可以為大數(shù)據(jù)項(xiàng)目帶來(lái)好處。
未來(lái)注定是信息的時(shí)代,所以掌握一門(mén)編程語(yǔ)言還是非常重要的!
學(xué)習(xí)從來(lái)不是一個(gè)人的事情,要有個(gè)相互監(jiān)督的伙伴,工作需要學(xué)習(xí)python或者有興趣學(xué)習(xí)python的伙伴可以私信回復(fù)小編“學(xué)習(xí)” 獲取資料,一起學(xué)習(xí)
文章來(lái)源:infoword