回覆列表
  • 1 # 西線學院

      你有一個大資料專案,你知道問題領域(problem domain),也知道使用什麼基礎設施,甚至可能已決定使用哪種框架來處理所有這些資料,但是有一個決定遲遲未能做出:我該選擇哪種語言?(或者可能更有針對性的問題是,我該迫使我的所有開發人員和資料科學家非要用哪種語言?)這個問題不會推遲太久,遲早要定奪。

      當然,沒有什麼阻止得了你使用其他機制(比如XSLT轉換)來處理大資料工作。但通常來說,如今大資料方面有三種語言可以選擇:R、Python和Scala,外加一直以來屹立於企業界的Java。那麼,你該選擇哪種語言?為何要選擇它,或者說何時選擇它?

      下面簡要介紹了每種語言,幫助你做出合理的決定。

      R

      R經常被稱為是“統計人員為統計人員開發的一種語言”。如果你需要深奧的統計模型用於計算,可能會在CRAN上找到它――你知道,CRAN叫綜合R檔案網路(Comprehensive R Archive Network)並非無緣無故。說到用於分析和標繪,沒有什麼比得過ggplot2。而如果你想利用比你機器提供的功能還強大的功能,那可以使用SparkR繫結,在R上執行Spark。

      然而,如果你不是資料科學家,之前也沒有用過Matlab、SAS或OCTAVE,可能需要一番調整,才能使用R來高效地處理。雖然R很適合分析資料,但是就一般用途而言不太擅長。你可以用R構建模型,但是你需要考慮將模型轉換成Scala或Python,才能用於生產環境,你不太可能使用這種語言編寫一種叢集控制系統(運氣好的話,你可以對它進行除錯)。

      Python

      如果你的資料科學家不使用R,他們可能就會徹底瞭解Python。十多年來,Python在學術界當中一直很流行,尤其是在自然語言處理(NLP)等領域。因而,如果你有一個需要NLP處理的專案,就會面臨數量多得讓人眼花繚亂的選擇,包括經典的NTLK、使用GenSim的主題建模,或者超快、準確的spaCy。同樣,說到神經網路,Python同樣遊刃有餘,有Theano和Tensorflow;隨後還有面向機器學習的scikit-learn,以及面向資料分析的NumPy和Pandas。

      還有Juypter/iPython――這種基於Web的筆記本伺服器框架讓你可以使用一種可共享的日誌格式,將程式碼、圖形以及幾乎任何物件混合起來。這一直是Python的殺手級功能之一,不過這年頭,這個概念證明大有用途,以至於出現在了奉行讀取-讀取-輸出-迴圈(REPL)概念的幾乎所有語言上,包括Scala和R。

      Python往往在大資料處理框架中得到支援,但與此同時,它往往又不是“一等公民”。比如說,Spark中的新功能幾乎總是出現在Scala/Java繫結的首位,可能需要用PySpark編寫面向那些更新版的幾個次要版本(對Spark Streaming/MLLib方面的開發工具而言尤為如此)。

      與R相反,Python是一種傳統的面嚮物件語言,所以大多數開發人員用起來會相當得心應手,而初次接觸R或Scala會讓人心生畏懼。一個小問題就是你的程式碼中需要留出正確的空白處。這將人員分成兩大陣營,一派覺得“這非常有助於確保可讀性”,另一派則認為,2016年,我們應該不需要就因為一行程式碼有個字元不在適當的位置,就要迫使直譯器讓程式執行起來。

      Scala

      現在說說Scala:在本文介紹的四種語言中,Scala是最輕鬆的語言,因為大家都欣賞其型別系統。Scala在JVM上執行,基本上成功地結合了函式正規化和麵向物件正規化,目前它在金融界和需要處理海量資料的公司企業中取得了巨大進展,常常採用一種大規模分散式方式來處理(比如Twitter和LinkedIn)。它還是驅動Spark和Kafka的一種語言。

      由於Scala在JVM裡面執行,它可以立即隨意訪問Java生態系統,不過它也有一系列廣泛的“原生”庫,用於處理大規模資料(尤其是Twitter的Algebird和Summingbird)。它還包括一個使用非常方便的REPL,用於互動式開發和分析,就像使用Python和R那樣。

      我個人非常喜歡Scala,因為它包括許多實用的程式設計功能,比如模式匹配,而且被認為比標準的Java簡潔得多。然而,用Scala來開發不止一種方法,這種語言將此作為一項特色來宣傳。這是好事!不過考慮到它擁有圖靈完備(Turing-complete)的型別系統和各種彎彎曲曲的運算子(“/:”代表foldLeft,“:\”代表foldRight),很容易開啟Scala檔案,以為你看到的是某段討厭的Perl程式碼。這就需要在編寫Scala時遵循一套好的實踐和準則(Databricks的就很合理)。

      另一個缺點是,Scala編譯器執行起來有點慢,以至於讓人想起以前“編譯!”的日子。不過,它有REPL、支援大資料,還有采用Jupyter和Zeppelin這一形式的基於Web的筆記本框架,所以我覺得它的許多小問題還是情有可原。

      Java

      最終,總是少不了Java――這種語言沒人愛,被遺棄,歸一家只有透過起訴谷歌才有錢可賺時才似乎關心它的公司(注:Oracle)所有,完全不時髦。只有企業界的無人機才使用Java!不過,Java可能很適合你的大資料專案。想一想Hadoop MapReduce,它用Java編寫。HDFS呢?也用Java來編寫。連Storm、Kafka和Spark都可以在JVM上執行(使用Clojure和Scala),這意味著Java是這些專案中的“一等公民”。另外還有像Google Cloud Dataflow(現在是Apache Beam)這些新技術,直到最近它們還只支援Java。

      Java也許不是搖滾明星般備受喜愛的首選語言。但是由於研發人員在竭力理清Node.js應用程式中的一套回撥,使用Java讓你可以訪問一個龐大的生態系統(包括分析器、偵錯程式、監控工具以及確保企業安全和互操作性的庫),以及除此之外的更多內容,大多數內容在過去二十年已久經考驗(很遺憾,Java今年迎來21歲,我們都老矣)。

      炮轟Java的一個主要理由是,非常繁瑣冗長,而且缺少互動式開發所需的REPL(R、Python和Scala都有)。我見過10行基於Scala的Spark程式碼迅速變成用Java編寫的變態的200行程式碼,還有龐大的型別語句,它們佔據了螢幕的大部分空間。然而,Java 8中新的Lambda支援功能對於改善這種情況大有幫助。Java從來不會像Scala那麼緊湊,但是Java 8確確實實使得用Java進行開發不那麼痛苦。

      哪種語言勝出?

      你該使用哪種語言用於大資料專案?恐怕這還得“視情況而定”。如果你對晦澀的統計運算進行繁重的資料分析工作,那麼你不青睞R才怪。如果你跨GPU進行NLP或密集的神經網路處理,那麼Python是很好的選擇。如果想要一種加固的、面向生產環境的資料流解決方案,又擁有所有重要的操作工具,Java或Scala絕對是出色的選擇。

      當然,不一定非此即彼。比如說,如果使用Spark,你可以藉助靜態資料,使用R或Python來訓練模型和機器學習管道(pipeline),然後對該管道進行序列化處理,倒出到儲存系統,那裡它可以供你的生產Scala Spark Streaming應用程式使用。雖然你不應該過分迷戀某一種語言(不然你的團隊很快會產生語言疲勞),使用一套發揮各自所長的異構語言也許會給大資料專案帶來成效。

  • 2 # 90後的狀態

    自己在用R語言我就來說說它對大資料處理的感覺。

    平常我們用的最多的就是Excel來處理資料,當然你就會發現它功能是很豐富但是就是隻能處理小的資料量。而對於大資料來說它就有點力不從心,然後R語言可以彌補這個,R對於資料量大一點的處理起來很有優勢

    R語言裡面有各種包他可以幫助我們處理資料、分析資料、建立模型我們也可以自己寫函式處理自己想解決的問題。

    R語言還有ggplot2這個資料視覺化的神奇,他能用圖表

  • 3 # 大資料小諸葛

    潤乾集算器,提供了大量集合運算函式,往往幾行程式碼就能搞定一個大資料的計算處理。

    被評為2018中國最佳大資料計算引擎!

  • 4 # 愛學習的小懶豬

    建議先學好一種編譯型語言,比如java,在學一到幾種解釋型語言,比如php python,期間要多學習資料庫和資料倉庫,多練習多實踐,就可以跟上步伐了

  • 5 # 深藏身與名

    選擇大資料專案程式語言的最重要因素是目究竟專案偏向於什麼。如果是更加側重於分析資料,構建分析並測試機器學習模型,那麼更偏向於資料科學語言。如果是希望構建大資料或物聯網(IoT)應用程式,那麼選擇又需要考慮其他因素.

    在資料科學探索和開發階段,今天最流行的語言無疑是Python。Python流行的一個重要原因是可用於幫助資料科學家探索大資料集的大量工具和庫。另外Python本身就是一門通用語言,實用型強.

    另一種流行的資料科學語言是R,長期以來一直是數學家,統計學家和科學家的最愛。MATLAB也廣泛用於大資料的探索和發現階段。另外如果不瞭解SQL,也無法在資料科學方面走得太遠,這仍然是一種非常有用的語言。

    在開發生產分析和物聯網應用程式時,通常會選擇不同的語言集。雖然可能在專案的實驗階段選擇Python或R,但實施通常會重寫應用程式並使用完全不同的語言重新實現機器學習演算法。

    Java仍然是一個非常受歡迎的選擇,因為世界上有大量的Java開發人員,以及一些流行的框架,如Apache Hadoop,是用Java開發的。Scala在Java虛擬機器(JVM)中執行,也廣泛用於資料科學; Apache Spark是用Scala編寫的,Apache Flink是用Java和Scala編寫的。但是,對於某些生產應用程式,開發人員仍然傾向於低階語言。當速度和延遲很重要時,許多開發人員轉向使用C和C ++來獲得他們想要的東西。

    使用C / C ++這樣的低階語言可以比使用自動記憶體管理的語言更嚴格地控制應用程式的記憶體和效能.一個編寫良好的C ++程式,對記憶體訪問模式和機器的體系結構有深入的瞭解,可以比依賴於垃圾收集的Java程式快幾倍。出於這些原因,許多具有巨大可伸縮性和效能要求的企業開發人員傾向於在其伺服器應用程式中使用C / C ++而不是Java。

    總之,究竟選擇何種大資料相關程式語言,還是要根據具體目標選擇.對於效能有著苛刻的要求,就偏向於低階語言.如果偏向於資料分析和探索Python和R比較適合。Java以其強大的生態和不錯的效能,也是一個可能的選擇.

  • 6 # IT人劉俊明

    當前正處在大資料時代背景下,大資料技術目前也正處在落地應用的初期,未來大資料的發展空間還是比較大的,所以學習大資料相關技術是個不錯的選擇。

    大資料程式語言的選擇要根據具體的工作崗位來進行,目前大資料領域的工作崗位包括大資料平臺研發、大資料應用開發、大資料分析和大資料運維,除了大資料平臺研發之外,其他崗位的人才需求量還是比較大的,尤其是大資料分析崗位。

    大資料應用開發崗位比較常見的程式語言包括Java、Python、Scala等,Java和Python是Hadoop平臺比較常見的程式語言,而在Spark平臺下,往往更多的選擇是Scala語言。從應用的普遍性和功能性來說,在Hadoop平臺下比較推薦採用Java語言,在Spark平臺下比較推薦採用Scala語言。Java語言的生態比較健全,而且效能穩定,所以採用Java語言會降低一定的開發風險。

    大資料分析崗位比較常見的程式語言包括Python、R、Julia、Matlab、GO等語言,其中Python和R語言是比較常見的選擇。Python語言隨著大資料的發展,在近幾年上升勢頭非常明顯,在最新的TIOBE語言排行榜上已經排到了第三位,這是一個非常不錯的成績。Python語言語法簡單、擴充套件性強、調整方便,而且Python語言自身具備強大的庫支援(Numpy、Scipy、Matplotlib等),在進行資料分析時非常方便。

    另外,Python語言也是大資料運維崗位比較常見的選擇,從這個角度來看,Python語言是大資料從業人員應該掌握的重點語言。

  • 中秋節和大豐收的關聯?
  • 怎麼才能讓人民的資本更具價值和創造價值?