大資料:程式語言真的重要嗎?

發表於2014-01-30

在大資料領域內,每一毫秒的效能損失都影響巨大。然而,像Python這樣通常被認為效能不是太好的程式語言,在過去一年中卻變得越來越流行了。大資料社群最近出現的一些文章和討論,又一次點燃了用於資料科學以及大資料領域內的程式語言選擇之爭。

AdRoll的首席工程師Ville Tuulos認為程式語言本身的效能其實並不重要。Ville於2013年9月在舊金山將自己的調查發現釋出到了一個meetup組中,向我們展示了AdRoll中使用的基於Python構建的後端架構,以及它們是如何在效能上超過那些業界中的巨頭(例如Amazon的Redshift)的。他們獲得成功的關鍵是,整個系統是基於他們自己非常特殊的用例而構建的,因此可以針對那種用例進行優化。正如Ville所說:

不管通用解決方案是採用何種程式語言實現的,你都可以使用一種高階程式語言來快速地實現出一個效能比通用方案更好的,應用於特定領域的解決方案。

但這並不意味著程式語言一點都不重要。最近有不少關於哪種語言最適合資料科學和大資料領域的爭論,而這一殊榮最有力的競爭者就是Python和R語言。一些人甚至把它說成是資料科學領域內的一場戰爭。在LinkedIn上面也有針對這一話題的討論,看上去大家的普遍共識是,R語言是一種學術性語言,“對資料科學家而言,R語言的優勢在於它所提供的大量的包以及其多樣性”。

但是對於海量資料處理這一塊,總體說來Python受到更多程式設計師的青睞,正如來自Dish Network的資料科學家Tom Rampley所說:

我經常使用R語言的各種包中所提供的統計功能。我還使用它在小規模的資料集上面執行各種資料操作。但是對於文字解析、大資料集上的資料操作以及編寫自己的演算法這些任務來說,我更加喜歡使用Python並結合使用它的NumpyScipyPandas這些包。

在最近幾個月裡,Python似乎在各個方面都要更勝一籌,正如Karissa McKelvey在2013年10月所寫的那樣,“我的資料太大了,無法裝載到R語言中”,還有Matt Asay也聲稱,“在資料科學的博士們中間,R語言仍然很受歡迎,但是隨著資料逐漸成為主流,Python正在接替R語言的地位”。

語言自身的效能常常是我們在開發複雜架構時決定到底使用哪種語言的一個關鍵因素,而且這一因素常常被過度誇大。實際上真正重要的是我們如何使用一種語言,正如Linus Torvalds所說,“低水平的程式設計師總在關心程式碼,而高水平的程式設計師則關注資料結構及其關係。”

Cloudera公司最近的一個開源專案Impala為例,它的目標是替代Hive,使查詢速度提高一個數量級。他們選擇使用了C++,而其他所有的Hadoop架構都是基於Java的,這種開發語言上的轉變經常被冠以某些與效能相關的原因。但實際上這裡的效能提升不是簡單地來自從Java到C++的轉換。Impala甚至沒有使用MapReduce,而是直接在記憶體中快取資料,所以很顯然,這裡的效能改善主要源於它採用了帶有不同資料結構和限制的一個完全不同的範型。這裡由Java到C++的轉換隻是一種錦上添花的工作,並不會對效能的改善起到雪中送炭的作用。

檢視英文原文:Big Data: Do Languages Really Matter? 

via: http://www.infoq.com/cn/news/2014/01/bigdata-languages?utm_source=infoq&utm_medium=popular_links_homepage 

相關文章