为什么 Apache Spark 的文档中“ML”与“MLLIB”有区别?

数据挖掘 pyspark
2021-10-08 17:42:10

我正在尝试找出与 Word2Vec 一起使用的pyspark库,并且根据 pyspark 文档,我看到了两个选项。

https://spark.apache.org/docs/2.2.0/mllib-feature-extraction.html#word2vec https://spark.apache.org/docs/2.2.0/ml-features.html#word2vec

mllib似乎是为了使用 RDD。并且ml似乎正在使用“DataFrames”。

有什么区别?如果这是引擎盖下的火花,他们不应该都使用 RDD 吗?

这里的“DataFrame”是什么?由于文档没有解释它。

2个回答

你是对的,mllib使用RDDs 和 ml 使用dataframes。一开始只是mllib因为dataframespark中不存在s。事实上,ml是一种新的mllib,如果你是新来的火花,你应该mldataframes 一起工作。

RDD 是记录的只读分区集合。RDD 是或者曾经是 Spark 的基本数据结构。它允许程序员以容错方式在大型集群上执行内存计算。因此,加快任务。

另一方面,数据框将数据组织到命名列中。它是一个不可变的分布式数据集合。Spark 中的 DataFrame 允许开发人员将结构强加到分布式数据集合上,从而实现更高级别的抽象。

两者非常不同,有关两者的更多详细信息可以在此链接上找到https://data-flair.training/blogs/apache-spark-rdd-vs-dataframe-vs-dataset/

mllib在火花的最初版本中,因为当时火花只与 RDD 一起工作。现在很多 Spark 编码都是围绕ml支持的数据帧完成的。Spark 也mllib进行了维护。

从 Spark 2.0 开始,spark.mllib 包中基于 RDD 的 API 已进入维护模式。Spark 的主要机器学习 API 现在是 spark.ml 包中基于 DataFrame 的 API。

问:有什么影响?

MLlib 仍将支持 spark.mllib 中基于 RDD 的 API 并修复错误。MLlib 不会向基于 RDD 的 API 添加新功能。在 Spark 2.x 版本中,MLlib 将向基于 DataFrames 的 API 添加功能,以与基于 RDD 的 API 实现功能对等。在达到功能奇偶校验后(对 Spark 2.3 进行粗略估计),基于 RDD 的 API 将被弃用。基于 RDD 的 API 预计将在 Spark 3.0 中删除。

问:为什么 MLlib 切换到基于 DataFrame 的 API?

DataFrames 提供了比 RDDs 更加用户友好的 API。DataFrames 的许多好处包括 Spark 数据源、SQL/DataFrame 查询、Tungsten 和 Catalyst 优化以及跨语言的统一 API。MLlib 基于 DataFrame 的 API 提供了跨 ML 算法和多种语言的统一 API。DataFrames 促进了实用的 ML Pipelines,尤其是特征转换。有关详细信息,请参阅管道指南。

问:什么是“Spark ML”?

“Spark ML”不是官方名称,但偶尔用于指代基于 MLlib DataFrame 的 API。这主要是由于基于 DataFrame 的 API 使用的 org.apache.spark.ml Scala 包名称,以及我们最初用来强调管道概念的“Spark ML Pipelines”术语。

问:MLlib 是否已弃用?

不。MLlib 包括基于 RDD 的 API 和基于 DataFrame 的 API。基于 RDD 的 API 现在处于维护模式。但是 API 和整个 MLlib 都没有被弃用。

您将在 Sparks 官方版本中找到更多详细信息https://spark.apache.org/docs/latest/ml-guide.html#announcement-dataframe-based-api-is-primary-api