你有一个大数据项目,你知道问题领域(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应用程序使用。虽然你不应该过分迷恋某一种语言(不然你的团队很快会产生语言疲劳),使用一套发挥各自所长的异构语言也许会给大数据项目带来成效。
揭开大数据生态圈背后的真相,切实了解开发者对大数据平台的需求,用真实数据分析大数据行业发展趋势及产品方向。近日,在2014中国大数据技术大会召开前夕,CSDN特推出针对大数据初创企业的全国大数据创新项目评选和针对大数据从业者的 2014中国大数据有奖调查 活动,旨在更全方位地洞察中国大数据产业现状,为大数据技术从业者和创业者们提供良好的参考与建议。
历经3个月的激烈争夺,凭借着创新的产品设计,贴近需求的技术实践,经过专家委员会的层层筛选,8家大数据初创企业脱颖而出,获得全国大数据创新项目的称号,并受邀在BDTC2014大会上展示他们的技术。恭喜!
- 日志易
- 杭州沃趣网络科技有限公司
- 一点资讯
- 九次方大数据
- 北京优立方科技有限公司
- 北京数人科技有限公司
- 聚道科技
- 量化派
调查方面,从11月7日到12月7日,在短短一个月左右的时间,我们得到来自全国各地3326位热心用户的支持,并从中挑选数十位朋友赠予丰厚大奖。下面一起看下本次调查为我们揭示的大数据行业,以及那些获奖的小伙伴们。
公司使用大数据的基本情况
时至今日,无论你是来自互联网行业、通信行业,还是金融行业、服务业或是零售业,相信都不会对大数据感到陌生。据调查报告显示,32.5%的公司正在搭建大数据平台,处于测试阶段;29.5%的公司已经在生产环境实践大数据,并有成功的用例/产品;24.5%的公司已经做了足够的了解,开发准备就绪;基本不了解的只占3000+用户的13.5%。
现有公司大数据的使用情况
其中,大家对大数据平台提出的的主要需求有:36.5%是进行海量数据的离线处理,比如大数据BI;23.2%是为了大量数据的实时处理,比如在线交互式分析;40.3%的公司的大数据平台则同时负责这两种业务。
大数据平台主要负责的业务
传统观念下,大数据往往是大型互联网公司的玩物。然而,通过本次调查,我们却发现在那些对大数据平台有需求的公司中,研发团队规模远没有我们想象的大,29.11%的研发团队仅有1-10人,次居第二的10-50人的规模占到了25.77%,两种规模的研发团队就超过了一半。可见,当下大数据的需求已不止步于大型公司。
研发团队规模
从传统架构到大数据时代应用程序架构的转变往往都会遇到一些问题和挑战。在对计算框架门槛调查中,非专业人士难于入手这一难题的比例达到了46.5%,这对企业人才的培训提出了迫切的要求。
当下计算框架使用过程中存在的问题
打造大数据平台需要企业克服诸多问题和挑战,尤其是安全性和可靠性方面。
大数据平台打造的主要挑战
大数据技术现状
大数据技术在开发者或从业人员的应用中逐步走向成熟,这些成熟的技术在开发人员的探索中得到了初步的稳定发展,公司的使用便是对这些技术的肯定。包括开发语言,数据分析语言、数据库等在内的大数据工具,究竟哪个更适合自己的业务,相信开发者们都有自己的评判标准。
在众多的开发语言中,大数据平台开发者们尤为青睐Java,占到了总比例的65%, 远远超过其他开发语言。值得一提的是,Hadoop本身就由Java实现的。
大数据开发语言
在大数据分析语言中,SQL的使用比例达到了64%,是R语言使用者人数的2倍之多。我们从中不难看出SQL-on-XXX项目的前景;同时从R的支持率上,也看到了更多非技术人员,比如数据分析师对低门槛分析类语言的需求。
大数据分析通常用的语言
在大数据存储上,HBase则以67.55%的比例位居榜首,远超其他数据仓库,当然这点与Hadoop原生支持是分不开的。
大数据存储中适合的数据库
对存储在HBase或Cassandra这样NOSQL数据库中的数据进行复杂查询,Solr、Elasticsearch、Splunk等主流的搜索引擎差距并不大。
对存储在NOSQL数据库中的数据进行复杂查询,比较合适的工具
大数据未来发展
诚如上文所说,许多对大数据有需求的公司并不一定具备强大的研发团队,在大数据处理过程中往往遭遇众多挑战。那么,在面临这些挑战时,开发者最迫切需要的是什么?
为了解决公司中的实际问题,39.28%的人希望拥有更犀利和通用的计算框架;37.88%的人希望能拥有更好的数据挖掘算法;21.59%的人则对保障性更高的运维有了更多的期盼。
为了解决公司的实际问题,最希望拥有的新技术
良好的大数据计算平台能够有效地支撑企业的海量数据,对于下一代通用大数据技术平台,Spark和Hadoop是公司的主要选择。同时,我们也看到了新贵Spark的发展前景,对比老将Hadoop,差距也仅有3.7%。
人们看好的下一代通用大数据计算平台
现有公司中,大数据平台已包含的部件位居前三的主要是SQL数据库(90.3%)、NoSQL数据库(50.7%)和HDFS(47.2%),在此基础上,公司计划添加的部件主要包含SQL数据库(57.2%)、Spark(41.5%)和NoSQL数据库(26.9%)。从各公司已有大数据部件和计划添加的部件可以看出,SQL数据库和NoSQL数据库在公司的大数据平台中发挥了重要的作用,得到了各公司的青睐。
现有大数据平台已包含的部件
现有大数据平台计划添加的部件
为了获取更高的收益,企业在前期需要进行有效地成本投入,对大数据平台的投资,公司更加不会吝啬,其中被调查的人群中,45.7%的人所在企业有追加投资大数据平台的打算,同时,公司也期望能够通过多种途径完善大数据平台,主要的完善途径包括基于开源平台自主研发、购买成熟的解决方案,使用公有云。
企业期望完善大数据平台的途径
使用公有云也是企业期望完善大数据平台的有效途径之一,在选择公有云平台方面,企业也面临着很大的倾向性,45.26%的人将阿里云作为首选。
公有云平台的选择
大数据技术培训
技术培训能够对开发者起到一定的指导作用,使得听众可以系统全面的把握新技术的知识脉络,了解技术的发展趋势。在此次调查活动中,69.4%的被调查者表示从未参加过大数据平台构建的技术培训。对于技术培训的形式,49%的人希望是线上培训,收费,成系列型的大数据解决方案,专攻一个方向,解决实际问题;37%的被调查者还是希望免费进行技术培训,即使不成系列,无论是线上线下,能听一节是一节。虽然收费在一定程度上影响了开发者对大数据技术培训的热情,但是能够切实解决实际问题,得到技术和能力的提升,仍是相关技术人员追求的培训目标。
更适合的技术培训形式
那么,对开发者来说,大家特别期望从技术培训中获取的知识又会是什么?
大数据领域,迫切学习或参加培训的新技术
大数据处理需要用到的九种编程语言
随着大数据的热潮不断升温,几乎各个领域都有洪水倾泻般的信息涌来,面对用户成千上万的浏览记录、记录行为数据,如果就单纯的Excel来进行数据处理是远远不能满足的。但如果只用一些操作软件来分析,而不怎么如何用逻辑数据来分析的话,那也只是简单的数据处理。
替代性很高的工作,而无法深入规划策略的核心。
当然,基本功是最不可忽略的环节,想要成为数据科学家,对于这几个程序你应该要有一定的认识:
R
若要列出所有程序语言,你能忘记其他的没关系,但最不能忘的就是R。从1997年悄悄地出现,最大的优势就是它免费,为昂贵的统计软件像是Matlab或SAS的另一种选择。
但是在过去几年来,它的身价大翻转,变成了资料科学界眼中的宝。不只是木讷的统计学家熟知它,包括WallStreet交易员、生物学家,以及硅谷开发者,他们都相当熟悉R。多元化的公司像是Google、Facebook、美国银行以及NewYorkTimes通通都使用R,它的商业效用持续提高。
R的好处在于它简单易上手,透过R,你可以从复杂的数据集中筛选你要的数据,从复杂的模型函数中操作数据,建立井然有序的图表来呈现数字,这些都只需要几行程序代码就可以了,打个比方,它就像是好动版本的Excel。
R最棒的资产就是活跃的动态系统,R社群持续地增加新的软件包,还有以内建丰富的功能集为特点。目前估计已有超过200万人使用R,最近的调查显示,R在数据科学界里,到目前为止最受欢迎的语言,占了回复者的61%(紧追在后的是39%的Python)。
它也吸引了WallStreet的注目。传统而言,证券分析师在Excel档从白天看到晚上,但现在R在财务建模的使用率逐渐增加,特别是可视化工具,美国银行的副总裁NiallO’Conno说,「R让我们俗气的表格变得突出」。
在数据建模上,它正在往逐渐成熟的专业语言迈进,虽然R仍受限于当公司需要制造大规模的产品时,而有的人说他被其他语言篡夺地位了。
“R更有用的是在画图,而不是建模。”顶尖数据分析公司Metamarkets的CEO,MichaelDriscoll表示,
“你不会在Google的网页排名核心或是Facebook的朋友们推荐算法时看到R的踪影,工程师会在R里建立一个原型,然后再到Java或Python里写模型语法”。
举一个使用R很有名的例子,在2010年时,PaulButler用R来建立Facebook的世界地图,证明了这个语言有多丰富多强大的可视化数据能力,虽然他现在比以前更少使用R了。
“R已经逐渐过时了,在庞大的数据集底下它跑的慢又笨重”Butler说。
所以接下来他用什么呢?
Python
如果说R是神经质又令人喜爱的Geek,那Python就是随和又好相处的女生。
Python结合了R的快速、处理复杂数据采矿的能力以及更务实的语言等各个特质,迅速地成为主流,Python比起R,学起来更加简单也更直观,而且它的生态系统近几年来不可思议地快速成长,在统计分析上比起R功能更强。
Butler说,“过去两年间,从R到Python地显著改变,就像是一个巨人不断地推动向前进”。
在数据处理范畴内,通常在规模与复杂之间要有个取舍,而Python以折衷的姿态出现。IPythonNotebook(记事本软件)和NumPy被用来暂时存取较低负担的工作量,然而Python对于中等规模的数据处理是相当好的工具;Python拥有丰富的资料族,提供大量的工具包和统计特征。
美国银行用Python来建立新产品和在银行的基础建设接口,同时也处理财务数据,“Python是更广泛又相当有弹性,所以大家会对它趋之若鹜。”O’Donnell如是说。
然而,虽然它的优点能够弥补R的缺点,它仍然不是最高效能的语言,偶尔才能处理庞大规模、核心的基础建设。Driscoll是这么认为的。
Julia
今日大多数的数据科学都是透过R、Python、Java、Matlab及SAS为主,但仍然存在着鸿沟要去弥补,而这个时候,新进者Julia看到了这个痛点。
Julia仍太过于神秘而尚未被业界广泛的采用,但是当谈到它的潜力足以抢夺R和Python的宝座时,数据黑客也难以解释。原因在于Julia是个高阶、不可思议的快速和善于表达的语言,比起R要快的许多,比起Python又有潜力处理更具规模的数据,也很容易上手。
“Julia会变的日渐重要,最终,在R和Python可以做的事情在Julia也可以”。Butler是这么认为的。
就现在而言,若要说Julia发展会倒退的原因,大概就是它太年轻了。Julia的数据小区还在初始阶段,在它要能够和R或Python竞争前,它还需要更多的工具包和软件包。
Driscoll说,它就是因为它年轻,才会有可能变成主流又有前景。
Java
Driscoll说,Java和以Java为基础的架构,是由硅谷里最大的几家科技公司的核心所建立的,如果你从Twitter、Linkedin或是Facebook里观察,你会发现Java对于所有数据工程基础架构而言,是非常基础的语言。
Java没有和R和Python一样好的可视化功能,它也不是统计建模的最佳工具,但是如果你需要建立一个庞大的系统、使用过去的原型,那Java通常会是你最基的选择。
Hadoop and Hive
为了迎合大量数据处理的需求,以Java为基础的工具群兴起。Hadoop为处理一批批数据处理,发展以Java为基础的架构关键;相较于其他处理工具,Hadoop慢许多,但是无比的准确和可被后端数据库分析广泛使用。和Hive搭配的很好,Hive是基于查询的架构下,运作的相当好。
Scala
又是另一个以Java为基础的语言,和Java很像,对任何想要进行大规模的机械学习或是建立高阶的算法,Scala会是逐渐兴起的工具。它是善于呈现且拥有建立可靠系统的能力。
“Java像是用钢铁建造的;Scala则是让你能够把它拿进窑烤然后变成钢的黏土”Driscoll说。
Kafka andStorm
说到当你需要快速的、实时的分析时,你会想到什么?Kafka将会是你的最佳伙伴。其实它已经出现五年有了,只是因为最近串流处理兴起才变的越来越流行。
Kafka是从Linkedin内诞生的,是一个特别快速的查询讯息系统。Kafka的缺点呢?就是它太快了,因此在实时操作时它会犯错,有时候会漏掉东西。
鱼与熊掌不可兼得,「必须要在准确度跟速度之间做一个选择」,Driscoll说。所以全部在硅谷的科技大公司都利用两个管道:用Kafka或Storm处理实时数据,接下来打开Hadoop处理一批批处理数据系统,这样听起来有点麻烦又会有些慢,但好处是,它非常非常精准。
Storm是另一个从Scala写出来的架构,在硅谷逐渐大幅增加它在串流处理的受欢迎程度,被Twitter并购,这并不意外,因为Twitter对快速事件处理有极大的兴趣。
Matlab
Matlab可以说是历久不衰,即使它标价很高;在非常特定的利基市场它使用的相当广泛,包括密集的研究机器学习、信号处理、图像辨识等等。
Octave
Octave和Matlab很像,除了它是免费的之外。然而,在学术信号处理的圈子,几乎都会提到它。
GO
GO是另一个逐渐兴起的新进者,从Google开发出来的,放宽点说,它是从C语言来的,并且在建立强大的基础架构上,渐渐地成为Java和Python的竞争者。
这么多的软件可以使用,但我认为不见得每个都一定要会才行,知道你的目标和方向是什么,就选定一个最适合的工具使用吧!可以帮助你提升效率又达到精准的结果。
参考:
http://mt.sohu.com/20160501/n447172173.shtml
http://www.199it.com/archives/261824.html
http://www.csdn.net/article/2014-12-08/2823020
http://www.csdn.net/article/2012-12-20/2813054-Database
https://www.aliyun.com/zixun/content/2_11_266828.html