关于这场Python 和Scala的较量,你怎么看?
当谈到ApacheSPark框架时,数据科学(网络)社区分为两个阵营:有的认为Scala好用,有的认为Python好用。本文的目的就是比较两者的优缺点,以供大家参考。
ApacheSPark是目前最流行的大数据分析框架(之一)。可以为Scala、Python、Java和R语言提供API支持,但本文只讨论前两种语言。因为Java不支持读写—评估—输出这一循环,R语言普及度又不高。前两种中,认为Scala好用的人表示,用Scala编写ApacheSPark很快。而且Scala作为静态类型的语音,已经被编译收录到了JVM(Java虚拟机)。作者认为,每一种方法都有其优缺点,最终的选择应取决于应用程序的类型。
性能
Scala的运行速度通常比Python快10倍左右。(因为JVM技术支持Scala语言的运行。)相比之下,作为动态类语言的Python,速度明显缓慢。因为在Python中调用ApacheSPark库需要大量的代码处理。所以从性能方面讲,Scala更适合对有限数据库的调用。
此外,Scala基于JVM技术,又根植于Hadoop框架下的HDFS文件系统,所以它同Hadoop框架的交互、兼容非常好。相比之下,Python于Hadoop框架的交互就及其糟糕了。开发人员甚至得使用第三方插件才行(如hadopy)。
学习曲线
这两种语言都是功能性、面向特定对象的语言,它们具有相似的语法构造。与Python相比,Scala可能要复杂一些,因为它的功能更加高级。Python适合于简单的逻辑处理,而Scala更适合于复杂的工作流。但Python也不是一无是处,因为Python语法简单,有着更加标准的程序库。
并发性
Scala有多个标准程序库,而且支持在大数据生态系统中快速集成数据库。它可以使用多个并发基元编写代码,而Python不支持并发或多线程编写代码。不过,Python支持重量级进程分叉。只不过它一次只能有一个线程处于活跃状态。而且每当编写新代码时,都必须重新启动其他进程,这无疑会增加内存的占用。
实用性
Python的特点是简洁、容易上手。而Scala则在框架、库、隐式、宏等方面有着极大的优势。这也是Scala在MapReduce框架中有着优秀表现的原因。由于Scala的API采集一致,因此许多Scala数据框架遵循着相似的数据类型。开发人员只需学习它常用的标准程序库,就可以轻松地掌握其他库。ApacheSPark是用Scala编写的,因此了解Scala也可以帮助您认识并修改ApacheSPark内部的功能。但对于NLP来说,Python则是首选。(因为Scala缺乏用于机器学习或NLP的工具。)此外,Python也是GraphX、GraphFrames和MLLib的不二之选。Python的可视化库是对Pyspark的补充。这是ApacheSPark和Scala都没有的东西。
代码恢复与安全
Scala作为静态类语言,它支持我们查找编译时犯的错误。而Python是动态类语言。也就是说,在每次更改现有代码时,Python语音更容易出错。因此,用Scala重构代码比Python重构更容易。
结语
Python运行速度较慢,但上手容易。Scala是运行最快且上手能力适中的编程语言。通过Scala能帮助你能更加全面的了解ApacheSPark,因为ApacheSPark就是用Scala编写的(但也不是绝对)。要知道,对编程语言的选择取决于项目的特征,我们要根据项目的特征做到灵活变通。Python面向分析,Scala面向工程,但这两种语言都是构建数据科学应用程序的优秀语言。总的来说,Scala更能充分的利用ApacheSPark的特征。