数据分析工具选Python还是Scala?我们帮你解决选择困难症

做数据分析时,如果需要编程,会面临一个数据分析工具选择的问题:选择Scala,还是Python?

一般给的建议是小数据用Python,大数据用Scala,当然是基于Spark平台的Scala,因为JVM的加持,Scala的性能相较于Python快10倍,Scala是函数式编程语言,主打简洁、性能;python主打过程式,易用、胶水,生态完整,是AI时代的御用语言,而且可以使用的数据处理基础库比较多,最流行的当然是Pandas。
在这里插入图片描述

先说下历史, 图灵,不但完成了二战密码破解任务,而且是计算机理论的奠基者,解决世纪数学难题的同时完成了那篇著名的论文《On Computable Numbers with an Application to the Entscheidungs-problem》,论文中定义的图灵机中仅仅一条纸带,一个读写头,就可以完成所有计算问题,现在的所有计算机都可以抽象为图灵机,图灵机也是所有过程式编程语言的基础理论依据,因为图灵机更接近现实世界,更容易实现,因此在一段时间内,全部都是过程式编程语言。

但是,一场天才之间的相遇,丘齐当上了图灵的老师,一场思想的碰撞,邱齐的 lambda算子(λ)横空出世,只用最简洁的几条公理便建立起了与图灵机完全等价的计算模型,掀开了函数编程语言的时代,先后出现了Lisp 、 Scheme 、 Haskell这些以抽象性和简洁美为主旨的语言。
在这里插入图片描述

函数式编程简洁但是不简单,学习曲线陡峭且比较难于进行性能优化,因此Scala兼采两家之长,支持函数式,构建于Java生态,复用了目前Java生态的所有成果,并且保证了程序执行速度,做到了“高效、广谱”,既可以面向对象,过程式编程,降低程序优化难度,又可以使用函数式编程,保证程序的简洁性。Spark 平台1.0版的核心代码只有4万行,Scala语言的简洁和丰富的表达力起到了关键作用。

该如何选择?

对我们来说,在多个语言间选择数据分析工具一般要考虑3个因素:

▶ 生态:是否有成熟的函数库,能否通过已经掌握的编程语言快速过渡?

▶ 性能:性能如何,在有些情况下是关键决策项?

▶ 简洁:语言是否简洁,能否能够快速验证我们的想法,实现“所见即所得”

01、生态

我们先分析下第一点,从下图我们可以看到,使用Scala可以直接使用DataFrame,而DataFrame的功能和Pandas完全相同,并进一步增加了分布式的能力,能应对海量数据的处理,所以Scala生态有特别成熟的函数库。

在这里插入图片描述

既然Scala又好又快为什么不直接用Scala做数据分析,还要用Python?

前面提到,函数式编程语言简洁但是不简单,学习曲线陡峭,既然Scala定位是函数式编程语言,因此也难逃此定律。使用Python实现数据统计,程序容易开发,容易迁移,可快速验证想法。

大部分数据分析师都掌握Python,并且基本都会使用Pandas,因此实际应用中Python是首选。而基于Scala语言的Spark平台也有和Pandas对应的基础框架DataFrame,且Pandas和DataFrame之间的函数功能相似度极高,因此我们也可以基于Python代码完成对Scala语言的一一比对式学习,让学习找到着力点,所以,如果你已经掌握Python,此时再学Scala是水到渠成的事。

02、性能

作为一门编程语言,最后都要落地执行,性能是至关重要的一环,性能好意味着时间短,做任何事,时间永远是最大的成本。

Python有优势,但是劣势也相当明显。除了Python语言本身特点导致其执行速度比Scala本身慢2到3倍外,不同语言开发的应用程序间的IO也往往是性能的关键瓶颈点。从下图可以看出,从Scala到Python处理过程需要经历两次IO过程,在数据量较小的情况下,此过程可以顺畅执行,但如果数据量较大,那肯定是瓶颈所在。
在这里插入图片描述

这个问题怎么解决?

目前有一些折中的方法,例如使用Arrow,基于流水线,完成高效的IO过程,如果你不想折中,我建议使用Scala,Scala语言既拥有面向对象的能力,又具有函数式编程的简洁和高效,并且和Java语言可天然的“零开销”集成。

03、简洁

性能上Scala有天然优势,那么从代码的简洁度上孰优孰劣,能否像Python一样快速验证我们的想法?我们从以下几个从简单到复杂的场景比对下”区别“。

▶ 第一个场景:字符处理

在这里插入图片描述

从最直观的感受上,这个字符处理场景 Scala略胜一筹。

▶ 第二个场景:自定义函数

当然,第一个场景只能是演示过程中的用的最直观的例子,可能在实际生产中的应用不多,那对于一些更专业的技术人员,自定义函数是日常开发中经常要用到的,我们再看看在这个场景谁更简洁:

在这里插入图片描述

从简洁性上来说,此役平分秋色。

▶ 第三个场景:Map/Reduce过程

Map/Reduce过程是现今所有分布式大数据处理技术的理论基石,而其中最关键的一环是对于键值对(Key-Value Pairs)的处理,Scala和python如何处理?

在这里插入图片描述

此处也是半斤对八两。

▶ 第四个场景:数据挖掘算法

做开发不只有简单场景,我们这里对比下在数据挖掘算法中两种语言的表现,二项式逻辑回归(Binomial logistic regression)给您奉上。

在这里插入图片描述

在这里插入图片描述

可以说是互为镜像,孪生兄弟。

总结

从过程式到函数式,编程语言经历了大半个世纪的发展,各个分支都已经趋近成熟,近15年出现的大数据技术的出现让各种编程语言有的老树新花,有的找到了新战场。

在这里插入图片描述

函数式编程更适合用在大数据处理技术的场景中,而Scala语言结合过程式的性能,函数式的简洁,极其强大的生态,以及背后巨大资本力量的推动,无疑是我们学习大数据处理技术的首选语言,如果你是Python开发者,或者Java开发者,都可以轻松成为Scala开发者,快速获得其性能、简洁和生态的优势。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值