翻译http://spark.apache.org/docs/latest/ml-guide.html

机器学习库MLib指南

MLib是运行在spark上的机器学习库,目的是为了方便使用scala语言进行机器学习。提供如下功能:

  • ML算法:提供分类、回归、聚类和协作筛选等常用机器学习算子
  • 功能:特征提取、转换、降维,和选择
  • 管道线:构建、评估和调优工具
  • 缓存:保存和加载算子、模型和管道线
  • 工具集:线性代数、统计、数据处理

公告:基于DataFrame的API是私有API

基于RDD的api目前处于维护阶段。
从spark2.0开始,spark.mlib包中基于RDD的api已经进入维护阶段,机器学习中私有API都存放在spark.ml包中,都是基于DataFrame的api。

上面的信息意味着:

  • MLib仍然支持spark.mlib包中基于RDD的API,并且会时不时修复个bug。
  • MLib目前不会增加新功能。
  • spark2.x后续更新会逐渐支持基于DataFrame的API,功能点与RDD的api类似。
  • 一旦基与DataFrame的API开发完毕(预计在spark2.2版本时),基于RDD的API就废弃了。
  • spark3.0彻底删除基于RDD的api

为何放弃RDD的api,转而支持DataFrame的api

  • DataFrame的API比RDD的API更加友好,DataFrame的优势包括spark数据源,SQL/DataFrame查询, 钨和催化剂的优化以及跨语言的统一API。
  • 基于DataFrame的机器学习api,是一套统一的,跨机器学习算法和跨多个语言的。
  • DataFrame也能促进使用ML管道线,尤其是功能转换。

Spark ML是什么?

Spark ML,并不是官方名称,而是偶尔指代基于DataFrameapi,因为DataFrameAPI的包名为org.apache.spark.ml。而且Spark ML Pipelines也是为了强调PipeLines的概念。

MLib已经废弃了么

还没有。Mlib包括RDD和DataFrame两种API,目前处于维护阶段,既没有废弃,也不是MLib的全部。

依赖

MLib使用线性代数包Breeze(依赖优化数据处理的netlib-java包),如果原生库在runtime没有包含,JVM会报错,且用一个干净的接口代替。
由于许可证的原因,原生我们并不包括netlib-java这个库,需要自行安装或导入到项目中。

如果使用python语言,你需要1.4+版本的NumPy。

迁移指南

MLib目前仍处于开发阶段,Experimental/DeveloperApi 标记的API意味着将来会有变更,下面介绍从2.0升级到2.1的变化

2.0 -》 2.1

改变

移除废弃的方法
  • setLabelCol in feature.ChiSqSelectorModel
  • numTrees in classification.RandomForestClassificationModel
  • numTrees in regression.RandomForestRegressionModel
  • model in regression.LinearRegressionSummary
  • validateParams in PipelineStage
  • validateParams in Evaluator

废弃与变更

废弃

Deprecate all Param setter methods except for input/output column Params for DecisionTreeClassificationModel, GBTClassificationModel, RandomForestClassificationModel, DecisionTreeRegressionModel, GBTRegressionModel and RandomForestRegressionModel

变更
  • SPARK-17870: Fix a bug of ChiSqSelector which will likely change its result. Now ChiSquareSelector use pValue rather than raw statistic to select a fixed number of top features.
  • SPARK-3261: KMeans returns potentially fewer than k cluster centers in cases where k distinct centroids aren’t available or aren’t selected.
  • SPARK-17389: KMeans reduces the default number of steps from 5 to 2 for the k-means|| initialization mode.