前言有一个大数据项目,你知道问题领域(problemdomain),你知道使用什么基础设施,你甚至可能已经决定使用哪个框架来处理这一切数据,但有一个决定被延迟:我应该选择哪种语言?(或者更确切地说,我应该强迫我所有的开发人员和数据科学家使用哪种语言?)这个问题不会推迟太久,迟早要决定。分享之前,还是要推荐一下自己创建的大数据学习交流Qun531629188。不管你是大牛还是想转行想学习的大学生,我都欢迎。今天的资料已经上传到群档,不定期分享干货,包括我。自己整理的2018最新适合学习的大数据教程,欢迎新手和进阶的朋友。当然,没有什么能阻止您使用其他机制(例如XSLT转换)来处理大数据作业。但总的来说,当今大数据可以选择三种语言:R、Python和Scala,再加上一直在企业界站稳脚跟的Java。那么,您应该选择哪种语言?为什么要选择它,或者什么时候应该选择它?以下是每种语言的简要说明,以帮助您做出明智的决定。RR通常被称为“统计学家为统计学家开发的语言”。如果您需要用于计算的深奥统计模型,您可能会在CRAN上找到它——您知道,CRAN被称为ComprehensiveRArchiveNetwork并不是没有道理的。在分析和绘图方面,没有什么能比得上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中针对这些较新的版本编写几个次要版本(对于SparkStreaming/MLLib端开发工具尤其如此)).与R相反,Python是一种传统的面向对象的语言,因此大多数开发人员会非常适应它,而R或Scala可能会让第一次接触的人望而生畏。一个小问题是您需要在代码中使用正确的空格。这将人们分为两个阵营,认为“这对确保可读性很有帮助”的人,以及认为在2016年我们不应该仅仅因为一行代码有一个不在代码中的字符就需要强行解释的人正确的位置。使程序运行。ScalaNowaboutScala:在本文涵盖的四种语言中,Scala是最轻松的语言,因为每个人都欣赏它的类型系统。Scala运行在JVM上,基本成功地将函数式范式和面向对象范式结合起来。目前,它在金融界和需要处理海量数据的公司取得了长足的进步,往往采用大规模的分布式方法来处理(如Twitter和LinkedIn)。它也是一种驱动Spark和Kafka的语言。由于Scala在JVM内部运行,它可以立即免费访问Java生态系统,但它也有范围广泛的“本地”库来处理大规模数据(特别是Twitter的Algebird和Summingbird)。它还包含一个非常方便的REPL,用于交互式开发和分析,就像Python和R一样。我个人非常喜欢Scala,因为它包含许多有用的编程功能,例如模式匹配,并且被认为比标准Java简洁得多.然而,在Scala中有不止一种开发方式,而且该语言将此作为一项功能进行宣传。好东西!但是考虑到它的图灵完备类型系统和各种波浪形运算符(“/:”代表foldLeft,“:”代表foldRight),打开Scala文件很容易,认为你正在看一些讨厌的Perl代码。这需要在编写Scala时遵循一套良好的实践和指南(Databricks的那些很有意义)。另一个缺点是Scala编译器运行起来有点慢,让人想起旧的“编译!”天。然而,它有一个REPL,对大数据的支持,以及一个以Jupyter和Zeppelin形式出现的基于Web的笔记本框架,所以我认为它的许多问题是可以原谅的。Java最后,总会有Java——一种不受欢迎、被遗弃、被一家公司(注:甲骨文)拥有的语言,似乎只有在起诉谷歌可以赚钱时才关心它,而且完全不合时宜。企业界只有无人机使用Java!但是,Java可能非常适合您的大数据项目。想想用Java编写的HadoopMapReduce。HDFS呢?它也是用Java编写的。甚至Storm、Kafka和Spark都可以在JVM上运行(使用Clojure和Scala),这意味着Java在这些项目中是“一等公民”。然后是谷歌云数据流(现在是ApacheBeam)等新技术,直到最近才支持Java。Java可能不是摇滚明星最喜欢的语言选择。但随着开发人员努力理清Node.js应用程序中的回调集,使用Java可以让您访问一个庞大的分析器、调试器、监控工具和库的生态系统,以实现企业安全和互操作性。),还有很多,其中大部分在过去的二十年里都经过了反复试验(遗憾的是,今年Java满21岁了,我们都老了)。炮轰Java的主要原因之一是它非常繁琐和冗长,并且缺乏交互式开发所需的REPL(R、Python和Scala)。我见过10行基于Scala的Spark代码很快变成了200行用Java编写的代码,巨大的类型语句占据了大部分屏幕。然而,Java8中新的Lambda支持功能大大改善了这种情况。Java从未像Scala那样紧凑,但Java8确实让使用Java进行开发变得不那么痛苦。至于REPL?好吧,还没有。明年推出的Java9将包括JShell,它有望满足您所有的REPL需求。哪种语言获胜?大数据项目应该使用哪种语言?恐怕要视情况而定。如果你用晦涩的统计计算做繁重的数据分析,难怪你不喜欢R。如果你在跨GPU做NLP或密集的神经网络处理,那么Python是一个很好的选择。如果您想要一个具有所有重要操作工具的强化的、生产就绪的数据流解决方案,Java或Scala是绝佳的选择。当然,它不一定是其中之一。例如,借助Spark,您可以使用R或Python使用静态数据训练模型和机器学习管道,然后序列化该管道并将其转储到存储系统,在那里它可以供您的生产使用ScalaSpark流应用程序。虽然你不应该过度迷恋一种语言(否则你的团队会很快产生语言疲劳),但使用一组发挥其长处的异构语言可能会给大数据项目带来成果。
