【问题标题】: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 也是如此。

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

【问题讨论】:

    标签: apache-spark apache-spark-mllib apache-spark-ml


    【解决方案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

      【讨论】:

        猜你喜欢
        • 2018-02-13
        • 2014-06-24
        • 2017-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-27
        • 2014-12-30
        相关资源
        最近更新 更多