Apache Spark框架下,Python与Scala谁更胜一筹?
在使用Apache Spark框架时,数据科学界分为两个阵营,一个阵营喜欢Scala,另一个阵营喜欢Python。本文比较两者,列出它们的优点和缺点。
Apache Spark是大数据分析最流行的框架之一。Spark是用Scala编写的,因为它可以非常快速,它是静态类型的,并且以已知的方式编译到JVM。尽管Spark具有Scala,Python,Java和R的API,但常用的语言是前两种。Java不支持Read-Evaluate-Print-Loop,而R不是通用语言。所以数据科学界分为两个阵营,一个阵营喜欢Scala,另一个阵营喜欢Python。各有其优缺点,最终选择应取决于结果应用。
性能
Scala经常比Python快10倍以上。Scala在运行时使用Java虚拟机(Java Virtual Machine,JVM),在大多数情况下它的速度比Python快一些。Python是动态输入的,这会降低速度。编译语言比解释语言更快。在Python的情况下,调用Spark库需要很多代码处理,因此性能较慢。在这种情况下,Scala适用于有限的内核。而且,Scala是Hadoop的原生产品,因为它基于JVM。Hadoop非常重要,因为Spark是在Hadoop的文件系统HDFS之上的。Python与Hadoop服务的交互很差,所以开发人员必须使用第三方库(如hadoopy)。Scala通过Java中的原生Hadoop API与Hadoop进行交互。这就是为什么在Scala中编写原生Hadoop应用非常简单。
学习曲线
两者都是功能性和面向对象的语言,除了繁荣的支持社区之外,它们的语法相似。由于其高级功能特性,与Python相比,Scala可能会更复杂一些。Python对于简单直观的逻辑更可取,而Scala对于复杂的工作流程更有用。Python具有简单的语法和很好的标准库。
并发
Scala拥有多个标准库和核心,可以快速整合大数据生态系统中的数据库。Scala允许使用多个并发基元编写代码,而Python不支持并发或多线程。由于其并发功能,Scala允许更好的内存管理和数据处理。不过,Python确实支持重量级进程分叉。在这里,一次只有一个线程处于活动状态。因此,无论何时部署新代码,都必须重新启动更多进程,这会增加内存开销。
可用性
两者都具有表现力,我们可以通过它们实现高水平的功能。Python对用户更加友好和简洁。Scala在框架,库,隐式,宏等方面总是更加强大。Scala在MapReduce框架中运行良好,因为它具有功能性。许多Scala数据框架遵循与Scala的API集合一致的类似抽象数据类型。开发人员只需要学习基本的标准集合,这可以使他们轻松熟悉其他库。Spark是用Scala编写的,因此了解Scala可以让你理解和修改Spark在内部的作用。此外,许多即将推出的功能将首先在Scala和Java中使用它们的API,并且Python API将在更高版本中发展。但对于NLP,Python是首选,因为Scala没有很多机器学习或NLP工具。此外,对于使用GraphX,GraphFrames和MLLib,Python是首选。Python的可视化库与Pyspark相辅相成,因为Spark和Scala都没有任何可比性。
代码恢复和安全
Scala是一种静态类型的语言,它允许我们找到编译时错误。而Python是一种动态类型的语言。每次你对现有代码进行更改时,Python语言都极易出现错误。因此,重构Scala的代码比重构Python更容易。
结论
Python虽然速度较慢但非常容易使用,而Scala是最快速且适度易用的。Scala提供对Spark最新功能的访问,因为Apache Spark是用Scala编写的。在Apache Spark中编程的语言选择取决于最适合项目需要的功能,因为每个都有自己的优点和缺点。Python更加面向分析,而Scala更加以工程为导向,但都是用于构建数据科学应用的优秀语言。总的来说,为了充分利用Spark的潜力,Scala会更有益处。如果你真的想在Spark上进行开箱即用的机器学习,那么这种神秘的语法是值得学习的。