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
,而另一个没有。
顺便说一句,RandomForestModel
或 Word2Vec
也是如此。
为什么有两个类?哪个是“正确的”?有没有办法将一个转换成另一个?
【问题讨论】:
【参考方案1】:o.a.s.mllib
包含旧的基于 RDD 的 API,而 o.a.s.ml
包含围绕 Dataset
和 ML Pipelines 构建的新 API。 ml
和 mllib
在 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 包有啥区别的主要内容,如果未能解决你的问题,请参考以下文章