Spark ML和MLLIB包有什么区别?

53

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

这两个类的实现方式有很大的不同,例如来自MLLib的类实现了Serializable接口,而另一个则没有。

顺便说一下,对于RandomForestModelWord2Vec也是如此。

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

2个回答

56

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

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


19

Spark Mllib

Spark Mllib包含建立在RDD之上的旧版API。

Spark ML

Spark ML提供了更高级别的API,建立在DataFrames之上,用于构建ML管道。

根据官方公告

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

  • MLlib将仍然支持基于RDD的API(在spark.mllib中)进行错误修复。

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

  • 在Spark 2.x版本中,MLlib将通过基于DataFrames的API添加功能,以达到与基于RDD的API的功能平衡。

  • 在达到功能平衡之后(大约估计为Spark 2.3),基于RDD的API将被弃用。

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

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

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

  • 基于DataFrame的MLlib API为机器学习算法提供了跨算法、跨多种语言的统一API。

  • DataFrames有助于实用的ML Pipeline,特别是特征转换。有关详细信息,请参见Pipelines指南。

更多信息请参见:机器学习库(MLlib)指南


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接