R、Python、Scala 和 Java,到底该使用哪一种大数据编程语言?

有一个大数据项目,你知道问题领域(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进行开发不那么痛苦。

至于REPL?好吧,目前还没有。明年推出的Java 9会包括JShell,有望满足你的所有REPL要求。

哪种语言胜出?

你该使用哪种语言用于大数据项目?恐怕这还得“视情况而定”。如果你对晦涩的统计运算进行繁重的数据分析工作,那么你不青睐R才怪。如果你跨GPU进行NLP或密集的神经网络处理,那么Python是很好的选择。如果想要一种加固的、面向生产环境的数据流解决方案,又拥有所有重要的操作工具,Java或Scala绝对是出色的选择。

当然,不一定非此即彼。比如说,如果使用Spark,你可以借助静态数据,使用R或Python来训练模型和机器学习管道(pipeline),然后对该管道进行序列化处理,倒出到存储系统,那里它可以供你的生产Scala Spark Streaming应用程序使用。虽然你不应该过分迷恋某一种语言(不然你的团队很快会产生语言疲劳),使用一套发挥各自所长的异构语言也许会给大数据项目带来成效。

本文作者:佚名

来源:51CTO

时间: 2024-08-30 23:01:57

R、Python、Scala 和 Java,到底该使用哪一种大数据编程语言?的相关文章

《R语言数据挖掘》----第1章 预备知识 1.1大数据

本节书摘来自华章出版社<R语言数据挖掘>一书中的第1章,第1.1节,作者[哈萨克斯坦]贝特·麦克哈贝尔(Bater Makhabel),李洪成 许金炜 段力辉 译,更多章节内容可以访问"华章计算机"公众号查看. 第1章 预备知识 本章中,你将学习基本的数据挖掘术语,比如数据定义.预处理等.最重要的数据挖掘算法将通过R语言进行说明,以便帮助你快速掌握原理,包括但不局限于分类.聚类和异常值检测.在深入研究数据挖掘之前,我们来看一看将要介绍的主题:数据挖掘社交网络挖掘文本挖掘网络

念叨千百遍的大数据,到底如何真正驱动企业运营?

本文首发于微信公众号:中外管理杂志.文章内容属作者个人观点,不代表和讯网立场.投资者据此操作,风险请自担. 企业最重要的思维,就是你要将现在已有的海量数据转变成真正能够驱动企业运营的能量. 企业最重要的思维,就是你要将现在已有的海量数据转变成真正能够驱动企业运营的能量. 嘉宾 | 国富资本董事长.原北京金融资产交易所总裁 熊焰山东红领集团总裁 张蕴蓝 浪潮国际执行总裁 胡海根 易观总裁 刘怡 主持人 | 复旦大学管理学院教授 刘杰 整理|本刊记者 朱冬 大数据对社会具有革命性意义 刘杰:现在,大

机器学习新星:Scala 优于 Java 的五大理由!

Java 在程序猿江湖的霸主地位已经很多年没有受到挑战了. 作为一门主流编程语言,在所有领域的普及率.职业选择.业界倾向榜单中,Java 即使不在榜首,也位于前列.即便是 Python 为王的机器学习领域,Java 的普及程度也稳居第二.三位,仅有 R 语言可与之相比.Java 能有如此巨大的成功,跟它的灵活多功能,以及处理复杂任务的能力是分不开的.但有没有比 Java 更好的选择呢? 就雷锋网所知,在资深程序猿眼中,能替代 Java.并且能做得比它更好的只有 Scala.这篇文章并不是对 Sc

编译Lambda表达式: Scala和Java 8

原文地址,译文地址,译者:梁海舰, 校对:丁一 最近几年Lambda表达式风靡于编程界. 很多现代编程语言都把它作为函数式编程的基本组成部分. 基于JVM的编程语言如Scala,Groovy还有Clojure把它们作为关键部分集成在语言中.现在Java8也加入了它们的行列. 有趣的是,对于JVM来说,Lambda表达式是完全不可见的,并没有匿名函数和Lamada表达式的概念,它只知道字节码是严格面向对象规范的.它取决于语言的作者和它的编译器在规范限制内创造出更新,更高级的语言元素. 我们第一次接

《数据科学实战手册(R+Python)》一第2章 汽车数据的可视化分析(R)

第2章 汽车数据的可视化分析(R) 数据科学实战手册(R+Python) 本章涵盖如下内容. 获取汽车燃料效率数据 为了你的第一个项目准备好R 将汽车燃料效率数据导入R 探索和描述燃料效率数据 进一步分析汽车燃料效率数据 研究汽车的产量以及车型 简介 本书介绍的第一个项目是分析汽车燃料经济数据.我们首先用R对该数据集进行分析.R常常被称为数据科学通用语言,因为它是目前最流行的统计和数据分析语言.在本书前半部分的各个章节中,你将会看到R在数据处理.建模.可视化方面的过人之处,并开发一些有用的脚本,

《数据科学实战手册(R+Python)》一第1章 准备你的数据科学环境

第1章 准备你的数据科学环境 数据科学实战手册(R+Python)本章涵盖如下内容: 理解数据科学管道 在Windows.Mac OS X和Linux上安装R 在R和RStudio中安装扩展包 在Linux和Mac OS X上安装Python 在Windows上安装Python 在Mac OS X和Linux上安装Python数据分析库 安装更多Python包 安装和使用virtualenv 简介传统意义上的食谱,就是作者擅长的烹饪菜谱,用于帮助读者学习新菜的做法.很多人相信,对于一份食谱而言,

Python的纯Java实现 Jython

问题描述 Jython是Python的纯Java实现.她无缝地结合了Java类与Python,使用户能以Python语言的语法编写在Java虚拟机上运行的 软件.它的特点有:与相似的Java程序相比,Jython极大的的减少了编程代码量.Jython同时拥有解释器和编译器,使其无需编译就可以**程序代码.Jython 是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现. Jython也有很多从CPython中继承的模块库.最有

谷歌开源 Python Fire;一张图读懂 Python、R 的大数据应用等 | AI 开发者头条

▲ 内容预览: 谷歌开源 Python Fire NASA 发布 2017-2018 软件目录,供开发者免费使用 一张图看懂大数据中 R 语言的应用 一张图看懂大数据中 Python 的应用 每日推荐阅读 谷歌搜索技术分析,如何一步步实现"不止于关键词"? █ 谷歌开源 Python Fire 昨晚谷歌公布了新的 Python 工具包--Python Fire.它的功能很简单:能从任何 Python 代码生成命令行接口(CLI).开发者面对任意一个 Python 程序,仅需调用 Pyt

比PCA降维更高级——(R/Python)t-SNE聚类算法实践指南

首发地址:https://yq.aliyun.com/articles/70733 更多深度文章,请关注:https://yq.aliyun.com/cloud 作者介绍:Saurabh.jaju2   Saurabh是一名数据科学家和软件工程师,熟练分析各种数据集和开发智能应用程序.他目前正在加州大学伯克利分校攻读信息和数据科学硕士学位,热衷于开发基于数据科学的智能资源管理系统. Linkedin:https://in.linkedin.com/in/saurabh-jaju Github: