我注意到SparkML中有两个LinearRegressionModel
类,一个在ML中,另一个在MLLib
包中。
这两个实现方式完全不同 - 例如MLLib
中的一个实现Serializable
,而另一个则不实现RandomForestModel
。
顺便说一下,Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked count
是真实的。
为什么有两节课?哪个是“正确的”?有没有办法将一个转换成另一个?
答案 0 :(得分:31)
o.a.s.mllib
包含旧的基于RDD的API,而o.a.s.ml
包含围绕Dataset
和ML管道的新API构建。 ml
和mllib
在2.0.0中达到了功能奇偶校验,并且mllib
正在慢慢被弃用(这在线性回归的情况下已经发生),并且很可能在下一个主要版本中被删除。
因此,除非你的目标是向后兼容,否则正确的选择"是o.a.s.ml
。
答案 1 :(得分:5)
Spark Mllib
spark.mllib包含在RDD之上构建的旧版API。
火花ML
spark.ml提供了基于DataFrames的高层API,用于构建ML管道。
从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将被弃用。
- 基于RDD的API有望在Spark 3.0中删除。
为什么MLlib切换到基于DataFrame的API?
DataFrames提供了比RDD更用户友好的API。 DataFrames的许多好处包括Spark数据源,SQL / DataFrame查询,Tungsten和Catalyst优化以及跨语言的统一API。
用于MLlib的基于DataFrame的API为ML算法和多种语言提供了统一的API。
DataFrame促进了实用的ML管道,特别是功能转换。有关详细信息,请参见管道指南。
更多信息,请阅读文档-https://spark.apache.org/docs/latest/ml-guide.html