Spark机器学习库(MLlib)指南

淺唱寂寞╮ 提交于 2021-02-16 23:12:55

机器学习库(MLlib)指南

MLlib是Spark的机器学习(ML)库。机器学习具有可扩展性和易用性。提供高级API,它提供了以下工具:

ML算法:常见的学习算法,如分类、回归、聚类和协同过滤

  • 特征化:特征提取、变换、降维和选择
  • 管道:用于构建、评估和调优ML管道的工具
  • 持久性:保存和加载算法、模型和管道
  • 实用程序:线性代数,统计学,数据处理等。

声明:基于DataFrame的API是主要API

基于MLlib RDD的API现在处于维护模式。

从Spark 2.0开始,在spark.mllib程序包已进入维护模式。Spark的主要机器学习API现在是DataFrame-based API spark.ml

有什么影响

  • MLlib将支持基于RDD的API spark.mllib以及错误修复。
  • MLlib不会为基于RDD的API添加新功能
  • 在Spark 2.x版本中,MLlib将为基于DataFrames的API添加功能,以实现与基于RDD的API的功能奇偶校验。
  • 在达到功能奇偶校验(粗略估计Spark 2.3)之后,将弃用基于RDD的API。
  • The RDD-based API is expected to be removed in Spark 3.0.
  • 预计将在Spark 3.0中删除基于RDD的API。

为什么MLlib会切换到基于DataFrame的API?

  • DataFrames提供比RDD更加用户友好的API。DataFrame的许多优势包括Spark Datasources, SQL/DataFrame queries,Tungsten和Catalyst优化以及跨语言的统一API。
  • 基于DataFrame的MLlib API跨ML算法和多种语言提供统一的API。
  • DataFrames有助于的ML Pipelines,特别是特征变换。有关详细信息,请参阅Pipelines guide

什么是“Spark ML”?

  • “Spark ML”不是官方名称,但偶尔用于指代基于MLlib DataFrame的API。这主要是由于org.apache.spark.ml基于DataFrame的API使用的Scala包名称,以及我们最初用来强调管道概念的“Spark ML Pipelines”术语。

MLlib已被弃用吗?

  • 不,MLlib包括基于RDD的API和基于DataFrame的API。基于RDD的API现在处于维护模式。但是API和MLlib都没有被弃用。

依赖

MLlib使用线性代数包Breeze,它依赖于 netlib-java进行优化的数值处理。如果本机库1在运行时不可用,您将看到一条警告消息,而将改用纯JVM实现。

由于运行时专有二进制文件的许可问题,我们netlib-java默认情况下不包含本机代理。要配置netlib-java/ Breeze以使用系统优化的二进制文件,请包含 com.github.fommil.netlib:all:1.1.2(或构建Spark with -Pnetlib-lgpl)作为项目的依赖项,并阅读netlib-java文档以获取平台的其他安装说明。

要在Python中使用MLlib,您将需要额外的NumPy版本以及1.4或更高版本。

2.2中的亮点

下面的列表重点介绍了Spark 2.2版本中添加到MLlib的一些新特性和增强功能: 

迁移指南

MLlib正在积极开发中。标记为Experimental/DeveloperApi的api在将来的版本中可能会发生变化,下面的迁移指南将解释版本之间的所有变化。

从2.1到2.2

突破性变化

没有突破性的变化。

反对和改变行为

反对

没有人反对。

Changes of behavior

  • SPARK-19787: Default value of regParam changed from 1.0 to 0.1 for ALS.train method (marked DeveloperApi). Note this does not affect the ALS Estimator or Model, nor MLlib’s ALS class.
  • SPARK-14772: Fixed inconsistency between Python and Scala APIs for Param.copy method.
  • SPARK-11569: StringIndexer now handles NULL values in the same way as unseen values. Previously an exception would always be thrown regardless of the setting of the handleInvalid parameter.

以前的Spark版本

Earlier migration guides are archived on this page.


  1. To learn more about the benefits and background of system optimised natives, you may wish to watch Sam Halliday’s ScalaX talk on High Performance Linear Algebra in Scala. 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!