新聞中心
今天給大家介紹一下關(guān)于如何選擇大數(shù)據(jù)的編程語(yǔ)言?

首先比如有一個(gè)大數(shù)據(jù)項(xiàng)目,你知道問(wèn)題領(lǐng)域(problemdomain),也知道使用什么基礎(chǔ)設(shè)施,甚至可能已決定使用哪種框架來(lái)處理所有這些數(shù)據(jù),但是有一個(gè)決定遲遲未能做出:
我該選擇哪種語(yǔ)言?(或者可能更有針對(duì)性的問(wèn)題是,我該迫使我的所有開(kāi)發(fā)人員和數(shù)據(jù)科學(xué)家非要用哪種語(yǔ)言?這個(gè)問(wèn)題不會(huì)推遲太久,遲早要定奪。
如何選擇大數(shù)據(jù)的編程語(yǔ)言
當(dāng)然,沒(méi)有什么阻止得了你使用其他機(jī)制(比如XSLT轉(zhuǎn)換)來(lái)處理大數(shù)據(jù)工作。但通常來(lái)說(shuō),如今大數(shù)據(jù)方面有多種語(yǔ)言可以選擇,比如Java、Python、R和Scala。那么,你該選擇哪種語(yǔ)言?為何要選擇它,或者說(shuō)何時(shí)選擇它? 下面我們照著介紹Python和Java這兩種語(yǔ)言。
Python
如果你的數(shù)據(jù)科學(xué)家不使用R,他們可能就會(huì)徹底了解Python。十多年來(lái),Python在學(xué)術(shù)界當(dāng)中一直很流行,尤其是在自然語(yǔ)言處理(NLP)等領(lǐng)域。因而,如果你有一個(gè)需要NLP處理的項(xiàng)目,就會(huì)面臨數(shù)量多得讓人眼花繚亂的選擇,包括經(jīng)典的NTLK、使用GenSim的主題建模,或者超快、準(zhǔn)確的spaCy。同樣,說(shuō)到神經(jīng)網(wǎng)絡(luò),Python同樣游刃有余,有Theano和Tensorflow;隨后還有面向機(jī)器學(xué)習(xí)的scikit-learn,以及面向數(shù)據(jù)分析的NumPy和Pandas。
還有Juypter/iPython――這種基于Web的筆記本服務(wù)器框架讓你可以使用一種可共享的日志格式,將代碼、圖形以及幾乎任何對(duì)象混合起來(lái)。這一直是Python的殺手級(jí)功能之一,不過(guò)這年頭,這個(gè)概念證明大有用途,以至于出現(xiàn)在了奉行讀取-讀取-輸出-循環(huán)(REPL)概念的幾乎所有語(yǔ)言上,包括Scala和R。
Python往往在大數(shù)據(jù)處理框架中得到支持,但與此同時(shí),它往往又不是“一等公民”。比如說(shuō),Spark中的新功能幾乎總是出現(xiàn)在Scala/Java綁定的首位,可能需要用PySpark編寫面向那些更新版的幾個(gè)次要版本(對(duì)SparkStreaming/MLLib方面的開(kāi)發(fā)工具而言尤為如此)。
Java
最終,總是少不了Java――這種語(yǔ)言沒(méi)人愛(ài),被遺棄,歸一家只有通過(guò)起訴谷歌才有錢可賺時(shí)才似乎關(guān)心它的公司(注:Oracle)所有,完全不時(shí)髦。只有企業(yè)界的無(wú)人機(jī)才使用Java!不過(guò),Java可能很適合你的大數(shù)據(jù)項(xiàng)目。想一想HadoopMapReduce,它用Java編寫。HDFS呢?也用Java來(lái)編寫。連Storm、Kafka和Spark都可以在JVM上運(yùn)行(使用Clojure和Scala),這意味著Java是這些項(xiàng)目中的“一等公民”。另外還有像GoogleCloudDataflow(現(xiàn)在是ApacheBeam)這些新技術(shù),直到最近它們還只支持Java。
Java也許不是搖滾明星般備受喜愛(ài)的首選語(yǔ)言。但是由于研發(fā)人員在竭力理清Node.js應(yīng)用程序中的一套回調(diào),使用Java讓你可以訪問(wèn)一個(gè)龐大的生態(tài)系統(tǒng)(包括分析器、調(diào)試器、監(jiān)控工具以及確保企業(yè)安全和互操作性的庫(kù)),以及除此之外的更多內(nèi)容,大多數(shù)內(nèi)容在過(guò)去二十年已久經(jīng)考驗(yàn)(很遺憾,Java今年迎來(lái)21歲,我們都老矣)。
炮轟Java的一個(gè)主要理由是,非常繁瑣冗長(zhǎng),而且缺少交互式開(kāi)發(fā)所需的REPL(R、Python和Scala都有)。我見(jiàn)過(guò)10行基于Scala的Spark代碼迅速變成用Java編寫的變態(tài)的200行代碼,還有龐大的類型語(yǔ)句,它們占據(jù)了屏幕的大部分空間。然而,Java8中新的Lambda支持功能對(duì)于改善這種情況大有幫助。Java從來(lái)不會(huì)像Scala那么緊湊,但是Java8確確實(shí)實(shí)使得用Java進(jìn)行開(kāi)發(fā)不那么痛苦。
你該使用哪種語(yǔ)言用于大數(shù)據(jù)項(xiàng)目?恐怕這還得“視情況而定”。如果跨GPU進(jìn)行NLP或密集的神經(jīng)網(wǎng)絡(luò)處理,Python是很好的選擇。如果想要一種加固的、面向生產(chǎn)環(huán)境的數(shù)據(jù)流解決方案,又擁有所有重要的操作工具,Java絕對(duì)是出色的選擇。
推薦課程:python基礎(chǔ)語(yǔ)法全講解視頻(馬哥教育2014版)
分享名稱:創(chuàng)新互聯(lián)Python教程:大數(shù)據(jù)學(xué)python還是java
標(biāo)題URL:http://m.5511xx.com/article/dppjghj.html


咨詢
建站咨詢
