我应该使用哪种该死的大数据编程语言?

你有一个大数据项目。您了解问题域,您知道要使用什么基础结构,也许您甚至已经决定了处理所有这些数据的框架,但是有一个决策迫在眉睫:我应该选择哪种语言?(或者更有针对性:我应该用什么语言来迫使我的所有开发人员和数据科学家受苦?)这个问题只能拖这么久。

当然,没有什么可以阻止您使用(比如XSLT转换)来处理大数据(这是一个很好的4月傻瓜对明天的建议,只是为了查看每个人脸上的表情)。但总的来说,现在有三种大数据语言可供选择-R、Python和Scala-加上Java的长期强大的企业乌龟。你应该选择哪种语言?为什么.或者什么时候?

下面列出每一项,以帮助指导您的决定。

R

r常被称为“统计学家为统计人员建立的语言”。如果你需要一个深奥的统计模型来计算,你可能会发现克拉恩-这不是没有意义的综合R档案馆网络,你知道的为了分析和策划,你无法战胜gggplot 2..如果你需要利用你的机器所能提供的更多的能量,你可以使用SparkR绑定来运行R上的星火。

然而,如果你不是一个数据科学家,而且以前没有使用过Matlab,SAS,或者八度音阶,那么在R中,它可能需要一些调整才能产生效果,虽然它对数据分析很有用,但是它在更一般的用途上不太好。您可以在R中构建一个模型,但是您会考虑将模型转换为Scala或Python以供生产,并且您不太可能使用该语言编写集群控制系统(如果您使用该语言进行调试,那么祝您好运)。

Python

如果你的数据科学家不做R,他们可能知道Python的内外。Python在学术界已经流行了十多年,特别是在自然语言处理(NLP)等领域。因此,如果您有一个需要NLP工作的项目,您将面临许多令人尴尬的选择,包括经典的NTLK,主题建模根辛,或燃烧的-快速和准确空间..类似地,Python在神经网络方面的作用远远超过了它的重量。西亚诺和TensorFlow然后科学-学习用于机器学习,以及NumPy和熊猫用于数据分析。

有Juypter/IPython也是-基于网络的笔记本服务器,它允许你将代码、情节,以及几乎任何东西,以可共享的日志格式混合在一起。这是Python的致命特性之一,尽管这些天来,这个概念被证明是非常有用的,以至于它已经扩展到几乎所有具有读-评估-打印-循环(Repl)概念的语言中,包括Scala和R。

Python往往在大数据处理框架中得到支持,但同时,它往往不是一流的公民。例如,SPark中的新特性几乎总是出现在Scala/Java绑定的顶部,在PySPark中提供这些更新可能需要几个较小的版本(特别是在SPark流/MLLib开发方面)。

相对于R,Python是一种传统的面向对象语言,所以大多数开发人员都会很乐意使用它,而第一次接触R或Scala可能会很吓人。一个轻微的问题是要求正确的白间距在您的代码。这将人们分为“这对增强可读性很好”和我们中的一些人,他们认为在2016年,我们不应该为了让程序运行而与解释器搏斗,因为一行字符不合适(你可能会猜到我在这个问题上的立场)。

Scala

啊,Scala-在本文中的四种语言中,Scala是一种可以毫不费力地靠在墙上的语言,每个人都很欣赏它的类型系统。运行在jvm上,Scala是功能和面向对象的范例的结合体,目前它在金融界和需要对大量数据进行操作的公司取得了巨大的进步,通常是以大规模分布式的方式(如twitter和linkedin)。这也是驱动两者的语言火花和卡夫卡.

当它在JVM中运行时,它立即可以免费访问Java生态系统,但它也有各种各样的“本地”库,用于大规模地处理数据(特别是Twitter的代数鸟和苏明鸟)。它还包括一个非常方便的用于交互开发和分析的REPL,如Python和R。

我非常喜欢Scala,如果您说不出的话,因为它包含了许多有用的编程特性,比如模式匹配,并且比标准Java少得多。然而,在Scala中通常有不止一种方法来完成某些事情,而这种语言将此作为一种特性来宣传。那就太好了!但是考虑到它有一个图灵全的类型系统和各种各样的杂乱无章的操作符(‘/:’forfoldLeft和“:”代表foldRight),很容易打开Scala文件,并认为您正在查看一个特别讨厌的Perl。在编写Scala时需要遵循一组良好的实践和准则(数据库是合理的).

另一个缺点是:Scala编译器有点慢,以至于它使经典的“编译!”xkcd带..尽管如此,它还是有REPL、大数据支持和基于Web的笔记本,以木星和齐柏林飞艇的形式存在,所以我原谅它的许多怪癖。

Java

最后,总是有Java-不受人喜爱,孤立无援,由一家公司拥有,这家公司似乎只关心通过起诉谷歌赚到钱,而且完全不时尚。企业中只有无人机使用Java!然而,Java可能非常适合您的大数据项目。考虑HadoopMapReduce-Java。HDFS?用Java写的。甚至Storm、Kafka和SPark也运行在JVM上(在Clojure和Scala中),这意味着Java是这些项目的头等公民。还有一些新技术,比如GoogleCloudDataflow(现在)阿帕奇梁),直到最近才支持Java。

Java可能不是忍者摇滚明星的首选语言。但是,当他们努力在node.js应用程序中整理回调的巢时,使用Java可以让您访问一个大型的分析器、调试器、监视工具、企业安全和互操作性库,以及更多的,其中大多数都经过了战斗测试。在过去的二十年里..(各位,对不起,Java今年21岁了,我们都老了。)

针对Java的主要抱怨是严重的冗长和缺乏用于迭代开发的REPL(出现在R、Python和Scala中)。我已经看到了10行基于Scala的星条旗代码气球变成了Java中的200行怪物,完成了占据大部分屏幕的大型类型语句。然而,Java 8中新的lambda支持为纠正这种情况做了很多工作。Java永远不会像Scala那样紧凑,但是Java 8确实减少了Java开发的痛苦。

至于REPL?好吧,你把我弄过去了-不管怎么说,现在。Java 9(明年推出)将包括JShell满足你所有的REPL需求。

鼓声,谢谢

大数据项目应该使用哪种语言?恐怕我要从懦夫那里走出去,坚定地站在“看情况而定”的一边。如果你用晦涩的统计计算来做大量的数据分析,那么如果你在进行NLP或跨GPU的密集神经网络处理,那么你会疯狂地不喜欢R,那么Python是一个很好的选择。对于拥有所有重要操作工具的成熟的生产流解决方案来说,Java或Scala无疑是很好的选择。

当然,它不一定非得是(或)。例如,使用SPark,您可以使用R或Python对模型和机器学习管道进行静态数据培训,然后将该管道序列化到存储中,在那里可以由ProductionScalaSPark流应用程序使用。虽然您不应该过火(否则您的团队很快就会遭受语言疲劳),但是使用一组能够发挥特定优势的异构语言可以为大数据项目带来好处。

未来注定是信息的时代,所以掌握一门编程语言还是非常重要的!

学习从来不是一个人的事情,要有个相互监督的伙伴,工作需要学习python或者有兴趣学习python的伙伴可以私信回复小编“学习” 获取资料,一起学习

文章来源:infoword

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();