评论
由 Preet Gandhi, NYU 数据科学中心
Apache Spark 是最流行的大数据分析框架之一。Spark 用 Scala 编写,因为它的静态类型和已知的编译方式使其速度较快。虽然 Spark 为 Scala、Python、Java 和 R 提供了 API,但最常用的语言是前两者。Java 不支持 Read-Evaluate-Print-Loop,而 R 不是通用语言。数据科学社区分为两个阵营;一个偏爱 Scala,而另一个则偏爱 Python。每种语言都有其优缺点,最终的选择应取决于应用的结果。
Scala 通常比 Python 快 10 倍以上。Scala 在运行时使用 Java 虚拟机(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 语言在每次修改现有代码时都容易出现错误。因此,相比于 Python,Scala 的代码重构更容易。
Python 运行较慢但非常易于使用,而 Scala 速度最快且使用起来相对简单。Scala 提供了对 Spark 最新特性的访问,因为 Apache Spark 是用 Scala 编写的。编程语言的选择取决于最适合项目需求的特性,因为每种语言都有其优缺点。Python 更倾向于分析,而 Scala 更倾向于工程,但两者都是构建数据科学应用程序的优秀语言。总体而言,为了充分利用 Spark 的全部潜力,Scala 会更有利。如果你真的想在 Spark 上进行创新的机器学习,那么学习那种神秘的语法是值得的。
简历:Preet Gandhi 是纽约大学数据科学中心的数据科学硕士生。她是一个狂热的大数据和数据科学爱好者。你可以通过 [email protected] 联系她。
相关: