在大数据领域内,每一毫秒的性能损失都影响巨大。然而,像 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 并结合使用它的 Numpy、Scipy 和 Pandas 这些包。
在最近几个月里,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++ 的转换只是一种锦上添花的工作,并不会对性能的改善起到雪中送炭的作用。