MLlib是Spark的机器学习(ML)库。旨在简化机器学习的工程实践工做,并方便扩展到更大规模。MLlib由一些通用的学习算法和工具组成,包括分类、回归、聚类、协同过滤、降维等,同时还包括底层的优化原语和高层的管道API。html
MLllib目前分为两个代码包:java
spark.mllib
包含基于RDD的原始算法API。spark.ml
则提供了基于DataFrames 高层次的API,能够用来构建机器学习管道。
咱们推荐您使用spark.ml,由于基于DataFrames的API更加的通用并且灵活。不过咱们也会继续支持spark.mllib包。用户能够放心使用,spark.mllib还会持续地增长新的功能。不过开发者须要注意,若是新的算法可以适用于机器学习管道的概念,就应该将其放到spark.ml包中,如:特征提取器和转换器。python
下面的列表列出了两个包的主要功能。git
虽然还有些降维技术在spark.ml中尚不可用,不过用户能够将spark.mllib中的的相关实现和spark.ml中的算法无缝地结合起来。github
MLlib使用的线性代数代码包是Breeze,而Breeze又依赖于 netlib-java 优化的数值处理。若是在运行时环境中这些原生库不可用,你将会收到一条警告,然后spark会使用纯JVM实现来替代之。算法
因为许可限制的缘由,spark在默认状况下不会包含netlib-Java的原生代理库。若是须要配置netlib-java/Breeze使用其系统优化库,你须要添加依赖项:com.github.fommil.netlib:all:1.1.2(或者在编译时加上参数:-Pnetlib-lgpl),而后再看一看 netlib-java 相应的安装文档。sql
要使用MLlib的Python接口,你须要安装NumPy 1.4以上的版本。apache
MLlib目前还在积极的开发当中。因此标记为 Experimental / DeveloperApi 的接口可能在将来发生变化,下面的迁移指南说明了版本升级后的变化。编程
从1.5到1.6,spark.mllib 和 spark.ml 包中并无重大的API变化,不过有一些行为再也不支持或者发生变化。markdown
已经废弃:
行为有变:
spark.mllib.tree.GradientBoostedTrees
: validationTol
的语义在1.6中有变。原先其表明偏差变化绝对值的一个阈值,而如今它相似于GradientDescent中的convergenceTol:对于较大的偏差,使用相对偏差(相对于上一次);而对于较小的偏差(<0.01),使用绝对偏差。
Tokenizer
transformer的行为相匹配。之前版本的迁移指南归档在这里:on this page