Spark ML 和 MLLIB 包有啥区别

Posted

技术标签:

【中文标题】Spark ML 和 MLLIB 包有啥区别【英文标题】:What's the difference between Spark ML and MLLIB packagesSpark ML 和 MLLIB 包有什么区别 【发布时间】:2016-12-14 14:52:16 【问题描述】:

我注意到 SparkML 中有两个 LinearRegressionModel 类,一个在 ML 包 (spark.ml) 中,另一个在 MLLib (spark.mllib) 包中。

这两者的实现方式完全不同 - 例如来自MLLib 的那个实现了Serializable,而另一个没有。

顺便说一句,RandomForestModelWord2Vec 也是如此。

为什么有两个类?哪个是“正确的”?有没有办法将一个转换成另一个?

【问题讨论】:

【参考方案1】:

o.a.s.mllib 包含旧的基于 RDD 的 API,而 o.a.s.ml 包含围绕 Dataset 和 ML Pipelines 构建的新 API。 mlmllib 在 2.0.0 中实现了功能对等,而 mllib 正在慢慢被弃用(这在线性回归的情况下已经发生)并且很可能会在下一个主要版本中被删除。

因此,除非您的目标是向后兼容,否则“正确的选择”是o.a.s.ml

【讨论】:

【参考方案2】:

Spark Mllib

spark.mllib 包含建立在 RDD 之上的遗留 API。

Spark ML

spark.ml 提供了构建在 DataFrame 之上的更高级别的 API,用于构建 ML 管道。

根据the official announcement

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

MLlib 仍将支持 spark.mllib 中基于 RDD 的 API 并修复错误。

MLlib 不会向基于 RDD 的 API 添加新功能。

在 Spark 2.x 版本中,MLlib 将向基于 DataFrames 的 API 添加功能,以达到与基于 RDD 的 API 相同的功能。

在达到功能奇偶性后(对 Spark 2.3 进行粗略估计),基于 RDD 的 API 将被弃用。

预计将在 Spark 3.0 中删除基于 RDD 的 API。

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

DataFrames 提供了比 RDDs 更加用户友好的 API。 DataFrame 的诸多优势包括 Spark 数据源、SQL/DataFrame 查询、Tungsten 和 Catalyst 优化以及跨语言的统一 API。

用于 MLlib 的基于 DataFrame 的 API 提供跨 ML 算法和多种语言的统一 API。

DataFrames 促进了实用的 ML Pipelines,尤其是特征转换。有关详细信息,请参阅管道指南。

欲了解更多信息:Machine Learning Library (MLlib) Guide

【讨论】:

以上是关于Spark ML 和 MLLIB 包有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

大数据spark中ml与mllib 的区别你分清了吗?

Apache Mahout 和 Apache Spark 的 MLlib 有啥区别?

Spark机器学习中ml和mllib中矩阵向量

大数据Spark MLlib机器学习

PySpark 中的回归。使用哪个库[重复]

Microsoft.Azure.Storage 和 WindowsAzure.Storage Nuget 包有啥区别?