有一个大数据项目,你知道问题领域(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应用程序使用。虽然你不应该过分迷恋某一种语言(不然你的团队很快会产生语言疲劳),使用一套发挥各自所长的异构语言也许会给大数据项目带来成效。(来源:云头条)
分享到:
相关推荐
本文主要探讨了两种备受瞩目的编程语言——Python和Java在人工智能,特别是机器学习和数据科学领域的应用与对比。 首先,从数据中我们可以看出,Python是目前在机器学习和数据科学中最受欢迎的编程语言。Python的易...
此外,Spark API设计简洁,支持Python、Java、Scala和R等多种语言,便于开发者使用。 在这个视频教程中,你将能够学习到如何使用Scala进行基本编程,理解其语法和特性。同时,你会深入到Spark的世界,学习如何创建...
该项目是关于大数据管理与分析的一个期末项目,主要涉及Python和Scala两种编程语言,这表明我们将探讨如何使用这两种语言处理和分析大数据集。Python以其丰富的数据分析库(如Pandas、NumPy和SciPy)和机器学习库...
Java是一种广泛应用于企业级应用、Android开发、云计算等领域的面向对象编程语言。学习Java,首先需掌握基础语法,如变量、控制结构、类与对象等。然后深入学习异常处理、多线程、集合框架(List、Set、Map)以及IO...
其次,Spark应用程序的编写通常使用Scala、Java、Python或R语言。在实验中,推荐使用Scala编写独立的应用程序,这需要对Spark的API有一定的了解。比如,统计文件行数可以使用`count()`方法,而创建Spark应用并打包成...
Apache Spark是一个开源的分布式计算系统,提供了强大的数据处理能力,它支持Scala、Java、Python和R语言。 《Scala编程》(Programming in Scala)是由Martin Odersky和Lex Spoon、Bill Venners三人合著的一本关于...
1. **Java编程**:Java是一种广泛使用的面向对象的编程语言,以其跨平台性和安全性著称。在项目中,你将学习到如何使用Java编写可维护、高效和健壮的代码,包括类、对象、接口、异常处理、多线程、集合框架等核心...
首先,Java是一种广泛使用的面向对象的编程语言,以其“一次编写,到处运行”的特性而闻名。它的核心特点包括平台无关性、强大的内存管理(通过垃圾回收机制)、丰富的类库以及安全性。在Java的世界里,开发者可以...
C语言是一种广泛使用的编程语言,它的设计初衷是用于编写操作系统。C语言因其接近硬件和高效执行的特点,被广泛用于系统编程和嵌入式开发。C语言的学习对于理解计算机结构和掌握底层编程有着重要的意义。 3. Java...
在大数据开发领域,Java、Python和Scala是三种广泛使用的编程语言。本教程主要关注的是Scala,这是一种静态类型的、函数式的编程语言,它以其强大的类型系统和面向对象特性在大数据处理中占据重要地位。 Scala与...
1. **基础编程语言**:大数据开发的基础通常包括掌握至少一种编程语言,如Java、Python或Scala。Java是Hadoop生态系统的首选语言,Python则因其强大的数据处理库(如Pandas和NumPy)而在数据分析领域广泛应用,而...
【Spark技术实践——词频统计】在大数据领域,Spark作为一种高效的数据处理框架,以其快速、通用和可扩展性而受到广泛关注。本实践旨在基于已经搭建的Hadoop平台,利用Spark组件进行文本词频统计,以此深入理解Scala...
尽管有其他语言如Java、R和Scala等也在竞争,但Python的地位已经相对稳固。对于想要进入AI和大数据行业的开发者,熟练掌握Python是必不可少的。同时,Python 的普及和广泛应用可能会推动其成为一种通用的编程“世界...
Java作为一种广泛使用的编程语言,是构建大数据服务平台的关键技术之一。Java以其跨平台的特性、强大的内存管理和丰富的开源库,为大数据处理提供了坚实的基础。例如,Hadoop和Spark这两个大数据处理框架,都大量...
首先,Java作为一种面向对象的编程语言,它的设计理念是将数据和操作数据的方法结合在一起,形成类,进而构建出对象。这种面向对象的编程方式与大数据处理的核心理念相契合,即数据和数据处理过程的封装与抽象。通过...
在现代数据分析和大数据处理领域,Python和Spark的结合已经成为了一种强大的工具。本文将深入探讨标题中的“x86架构python379.zip”文件,该文件包含了预编译的Python 3.7.9版本,特别针对x86架构进行了优化,并且...
1. 基础知识:学习Linux操作系统、编程语言(如Java、Python、Scala)和数据库原理。 2. 大数据框架:深入理解Hadoop、Spark、Hive等框架的原理和使用方法。 3. 分析工具:掌握数据可视化工具(如Tableau、Power BI...
在这个系统中,Java和Python两种编程语言被用于开发,Java通常用于编写分布式系统的底层服务,而Python则常见于数据分析和机器学习模型构建。 描述中提到“代码都经测试过,能跑通”,意味着提供的代码是完整且可以...
Apache Spark是一个快速、通用的大数据处理引擎,它提供了一个高级的API,支持Java、Scala、Python和R语言。Spark的一个核心概念是弹性分布式数据集(RDD),它是一个容错的、并行操作的数据集合,可以在集群上自动...