CIO时代APP微讲座:中国人民大学夏天解读大数据时代的编程语言

2017-04-13 13:44:25  来源:CIO时代网

摘要:4月9日,中国人民大学信息资源管理学院副教授夏天在CIO时代APP微讲座作了题为《大数据时代的编程语言》的主题分享。
关键词: CIO时代APP 微讲座
\
  
        4月9日,中国人民大学信息资源管理学院副教授夏天在CIO时代APP微讲座作了题为《大数据时代的编程语言》的主题分享,详述大数据时代主流编程语言的不同特点,以及初学者如何选择学习一门与大数据有关的编程语言的相关问题。

\

  我们知道,编程语言是大数据分析处理的必备工具,但编程语言的种类和数量非常多。以个人所接触过的编程语言为例,在过去二十年的时间中,先后学过的语言有Pascal、C语言、C++语言、Visual Basic、ASP、PHP、Java、Python、R语言、Scala等不下十种编程语言,其中Script、Python和Java语言用的较多。此外,还有Ruby、Ada等优秀的语言。这么多编程语言在大数据处理分析方面常用的有哪些?这些大数据中常用的编程语言各有什么特点?不同专业背景和兴趣爱好的人员如何选择编程语言的利器来拥抱大数据的挖掘分析?

  一、大数据时代数据分析处理常用的编程语言有哪些

  为了回答这一问题,从YouTube、Quora和知乎三个重要的社交媒体为例,以编程语言和大数据作为检索条件,探究有哪些发现。

  YouTube检索结果的第一页,共有二十条记录,在这二十条的记录中,Python出现了8次,R出现了4次,Java出现了3次。我们知道,开源所使用的Hadoop和MapReduce主要是由Java语言编写而成。因此,如果标题中未直接提到某个具体的编程语言,但又涉及了Hadoop、MapReduce,我们也可归为Java,那么,Java总计出现了6次,除此之外,Scala和Ruby各出现了一次。

  Quora的检索结果中主要涉及了Python和R语言为主,也涉及了Java和Scala的相关讨论,在big data话题下关于Python和R语言的争论是比较热门的讨论内容。

  知乎的检索结果主要涉及了Java、Python、Scala、R语言、C语言和C++语言,其中以Java和Python为主。

  除了上述典型的三个社交媒体之外,还可考虑当前的大数据生态圈。当前的大数据生态圈主要以Hadoop/MapReduce、Spark和Storm为典型代表,而这三个框架无一例外,都是构建在JVM(Java Virtual Machine)——Java虚拟机上,从这个角度来看,Java语言和大数据的关联最为密切。除此之外,Spark除了Java之外,还提供了Python、Scala和R语言的相关接口。

  二、大数据领域四大编程语言的特点

  综合看来,目前大数据分析处理应用最为广泛的编程语言主要有四种:Java、Python、Scala和R语言。

\

  世界上有一个著名的编程语言排行榜,即TIOBE以反映编程语言的热门程度。2017年3月的排行中,Java、Python、R语言和Scala分别占据了第一、第五、第十三和第三十的位置。上图中反映出近十五年来,Java在绝大多数时间中都占据了排行榜的首位,足见其本身的流行度。

  1.Java

  正如前面所提到的,Java是目前编写大数据的重要语言,我们用的Hadoop、Spark和Storm都是用Java语言编写而成的,可见Java语言在大数据方面的重要作用。

  Java最初由Sun公司的詹姆斯·高斯林开发出来,高斯林长期供职于Sun公司,但Sun公司在2009年被甲骨文收购,高斯林一直对甲骨文公司抱有不满,并于2010年离开甲骨文加入谷歌,他在离开甲骨文时说:“我所说的都关乎细节与诚实,但吐露真相只会带来更多的坏处”,“在Sun与甲骨文的并购会议上,到处是有关Sun和谷歌专利的争吵。甲骨文律师的眼睛闪闪发光。”关于Java的故事虽然铺满了传奇,比如那些不可思议的成功、失之交臂的良机、纠缠不清的官司,但Java本身却成功地应用在网络计算、移动等各个领域。历史上从未有像Java这样可以如此广泛地被应用的语言和平台。

  Java语言如此成功与Java的特点是密切相关的,在Java之前最流行的编程语言是C语言,但C语言的指针处理对普通程序员而言简直是梦魇,经常会带来内层泄露问题。因此,高斯林发明Java的一个重要原因便是为了解决C语言的泄露问题和C++兼容C语法而造成的一些历史遗留问题。Java提出了引用类型,取消了C语言中特殊的指针语法,并通过垃圾自动回收的机制,自动回收不再使用的对象内存。程序员只需创建对象,无需关心如何回收对象,这便使得程序员的犯错率大大降低,开发效率也大大提升。同时,Java还提出了中间语言和虚拟机的概念,Java程序会先编译成叫字节码的中间语言,再由运行在各操作系统上的Java虚拟机软件(JVM),在运行时解释和执行。这样做的好处是实现了当年Java的口号:一次编写、到处运行,使得企业可以自由选择操作系统和服务器设备,保护了企业的投资。

  我们直觉上认为,Java编写的代码需要编译为字节码,再由虚拟机来解释执行,运行速度应该慢于直接编译为机器码的语言,如C语言。但人们对Java虚拟机做了大量的优化,使得普通程序员编写的Java程序远快于普通程序员编写的C语言程序,不同水平的Java程序员也能较好的进行团队协作,开发大型项目,变相降低了企业的人力成本。

  Java具有跨平台特性和开放特性,编写效率相对较高,它属于强类型的静态语言,其本身结构非常方便大型项目的组织管理和模块划分。因此,毕业于美国斯坦福大学的Hadoop之父DougCutting在编写Hadoop时选择了Java语言,这并非偶然。

  Java语言的特点人们比较认可的是:简单性、面向对象、分布式、健壮性、多线程、安全性、可移植性、动态性等特点,当然,其中的简单、多线程是相对于当时的C语言、C++而言的。总之,Java构成了当前企业大数据计算的基石。

  2.Python

  1989年的圣诞节期间,在荷兰的阿姆斯特丹,年轻的Guidovan Rossum为了打发圣诞节的无聊,决定开发一个新的脚本解释程序,由于他非常喜欢英国六人喜剧团体Monty Python,因此以Python作为脚本名称。

  Python由ABC语言继承而来,非常适合非程序员来学习使用,普通人员在学习Python时入门非常容易,刚刚提到Java是一门简单的语言,Python则是“更加简单”的语言。我们在开始学习Java时,需要配置环境变量、安装基础开发环境、编译运行等,这些基础工作使得很多人抓狂,甚至成功将很多人吓跑了。Python要简单得多,下载安装之后,在命令行直接输入Python,便可打开一个解释器,每执行一行代码能立即看到输出结果。因此,初学者非常乐意将Python当作一个强大的科学计算器来使用,体验Python的强大功能。

  Python遵循了优雅、明确、简单的设计原则,一件事情会有很多种方法,其中会有相对较好的一种。Python开发者的哲学是用一种方法,最好只用一种方法做一件事情,如果有多种选择,Python开发者会拒绝花哨的语法,而是选择明确的、没有歧义的语法。

  Python强制使用空格作为逻辑代码块的隶属关系控制,强制程序员养成良好的编程习惯。Python的解释器中会输出Python推荐的编写风格和准则,例如优美胜于丑陋,明了胜于晦涩。在Python显示器中输入importthis,便可看到这一系列准则的英文。

  经过二十多年的发展,Python已变得非常流行。从早期的各类系统管理任务和web编程,到后来的科学计算和数据分析,Python的应用都比较多。Python的简洁、易读和可扩展性使得用Python做科学计算的研究机构日益增多,如卡内基梅隆大学的编程基础、MIT的计算机科学基编程导论都采用了Python来教授这些课程。此外,众多开源的科学计算软件包也都提供了Python调用接口,如著名的图形库(OpenCV)、三维可视化库(VTK),在科学计算和数据分析方面也形成了较为统一的经典扩展库,如用于快速数组处理的NumPy、数值运算专用的SciPy、图形绘制的MatplotLib、金融处理方面的Pandas。同时,还有大量的经典图书采用了Python语言来讲解数据挖掘方面的相关理论,如集体智慧编程、社交媒体的数据挖掘与分析等等。

  因此,Python的特点可以总结为简单、优雅、易于扩展、有丰富的科学计算和数据分析扩展库,非常适合数据科学家来学习使用。

  3.R语言

  R语言本质上是一款集统计分析和可视化于一体的免费的可跨平台运行的统计软件。由新西兰奥克兰大学的Robert Gentleman和RossIhaka二人在九十年代初期共同发明,当时两个人教授一门初等的统计课程,为方便授课开发了这一语言,由于两个人的名字均以R开头,因此被称为R语言。

  R语言可以看作是大名鼎鼎的贝尔实验室所开发的S语言的一种实现。1975年,贝尔实验室的统计研究部使用了一套文档齐全的扩充库来做统计研究,我们称其为SCS。但SCS在做统计分析时需要大量的编程,有人认为这样太麻烦,于是贝尔实验室又开发了一套完整的高级语言系统,即S语言,用于交互。1993年,S语言的许可证被MathSoft公司买断了,引起了人们的担忧,而开源的R语言引起了人们的关注。1997年,R语言正式成为GNU项目,大量的优秀统计学家加入了R语言的开发行列。到今天,这一场开源和商业、开放和封闭之争已尘埃落定,R语言已成为当今最为流行的统计分析工具之一。

  和Python类似,R语言的使用也很简单,直接打开R的交互环境,输入demo,便可以看到其中的一些例子。因此,初学者可以很快地获得直观的感受,增加学习的乐趣,对学习统计知识非常有帮助。

  从R语言的发展历史来看,主要是为统计学家解决数据分析问题而开发的。R的特点是尤其擅长于数据的统计分析。R语言算法几乎覆盖了整个统计领域的前沿算法,重复性的工作借助R语言强大的分析能力和排版能力,利用Sweave能得到很好的解决。R本身属于统计编程类语言,受到其算法架构的通用性和速度、性能等方面的影响,最开始的设计完全是基于单线程和内存计算完成。因此,在处理大规模数据时显得力不从心,好在R有一些优秀的扩展,能在一定程度上解决这些问题。如SparkR、RHadoop等等。

  4.Scala语言

  我们知道,伟大的Java促进了今日信息技术的辉煌,Java支撑了大量的企业级关键应用,如web站点、手机应用等等。但人们一直期待Java的重大改进和更新换代,使其吸收其他语言的长处,进一步提升生产效率。而Scala不仅在“更好的Java”方面做得非常成功,而且在并发编程、大数据处理、科学计算方面都取得了不错的效果。

  Scala由瑞士的联邦理工学院Martin Odersky在2003年开始设计,在此之前,他已经因对Java的优化而闻名于世,Scala是其又一成名之作。正如其名,Scala本身是一门可扩展的语言,其中有静态运行、面向对象编程、函数式编程、类型推导、高阶函数等众多特性。Scala语言非常经典,相同的功能用Scala实现,代码量能达到Java的百分之二十左右。Scala不仅可以做到更好的Java,而且在数据统计分析方面,原先Python和R语言独具的一些统计分析模块,已经有越来越多的Scala实现,例如Breeze、Spark data frame、Zeppelin。我们知道以前的数据分析书籍大多由Python语言写成,现在也有许多用Scala进行数据分析和机器学习的书籍,如Scala Data Analysis Cookbook、Scala for Machine Learning。

  Scala可以无缝衔接原有的Java库,充分地利用现有的Java资源,在大数据并行分析处理方面更是独具优势。因此,很多大数据平台都选择Scala作为首要的实现语言和API接口语言。

  个人认为,Scala最主要的特点是非常灵活,以至于初学者的学习曲线比较陡峭,但Scala很好地将Java的面向对象编程方法与Haskell函数式编程思想揉在一起,其中体现的现代化编程思想值得程序设计人员深入的学习和体会。

  这四种编程语言各有各的优点,但有人的地方便有争论,这里的争论焦点主要集中于R和Python间的选择问题。其实,通过这两种语言的官网介绍,便可以看出他们的定位并不完全一致,Python是一种通用的编程语言,除数据分析外在很多领域都有广泛的应用,R的定位是“用于统计计算的免费软件环境”。

  三、初学者如何选择大数据编程语言

  工欲善其事必先利其器,对于奋战在大数据处理和分析前沿的人员而言,手中应有一把使用自如的快刀,当面对上述四种各有特色的编程语言应如何选择?

  在Quora上,有人提到,对于数据工程推荐使用Java和Scala,对于数据科学推荐使用Python和R语言,个人觉得很有道理。如果你是一个统计学家,并没有太多的计算机科学背景,R应该是一个很不错的选择;如果接受过较为系统的程序设计训练,又想从事数据分析方面的工作,Python应该是不错的选择;如果我们要做大数据产品、大数据具体项目,或者想深入了解现在大数据框架底层的运行机制,那学习Java是必不可少的基本要求;对于Scala语言,如果你是一个熟练的Java工程师,厌倦了Java的冗余繁琐,向往美好的函数式编程、向往Python的简洁优雅、向往R语言的强大统计功能,可以选择Scala。Scala还有一个额外的好处,用Scala写的程序代码初级程序员很难看懂,也不敢随意修改,便不用担心在团队协作时精心编写的代码被一些初级程序员改错。

  当然,个人认为,编程语言并没有高低贵贱和优劣之分,各有各的优点,如果你有兴趣和能力,不妨将各种语言都实践一遍,尤其是侧重于大数据工程的技术人员,在学好一门重量级的语言,如Java语言,与此同时,掌握一门Python或R语言对于开拓自己的视野、学习数据分析的理论、阅读相关的书籍都是大有裨益的。

第三十五届CIO班招生
国际CIO认证培训
首席数据官(CDO)认证培训
责编:夏天

免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。