MLlib是一些常用的机器学习算法和库在Spark平台上的实现。MLlib是AMPLab的在研机器学习项目MLBase的底层组件。MLBase是一个机器学习平台,MLI是一个接口层,提供很多结构,MLlib是底层算法实现层。

    MLlib中包含分类与回归、聚类、协同过滤、数据降维组件以及底层的优化库。





spark mllib 导出pmml 不支持vector_java


MLlib组件图



通过这幅图读者可以对MLlib的整体组件和依赖库有一个宏观的把握。

下面对图中读者可能不太熟悉的底层组件进行简要介绍:

BLAS/LAPACK层:LAPACK是用Fortran编写的算法库,顾名思义,Linear Algebra PACKage,是为了解决通用的线性代数问题的。另外必须要提的算法包是BLAS(Basic Linear Algebra Subprograms),其实LAPACK底层是使用了BLAS库的。不少计算机厂商都提供了针对不同处理器进行了优化的BLAS/LAPACK算法包。

Netlib-java(官网为:https://github.com/fommil/netlib-java/)是一个对底层BLAS, LAPACK封装的Java接口层。

Breeze(官网为:https://github.com/scalanlp/breeze)是一个Scala写的数值处理库,提供向量,矩阵运算等API。

库依赖:

MLlib底层使用到了Scala书写的线性代数库Breeze,Breeze底层依赖netlib-java库。netlib-java底层依赖原生的Fortranroutines。所以,当用户使用时需要在节点上预先安装gfortranruntime library 

(下载地址:https://github.com/mikiobraun/jblas/wiki/Missing-Libraries)。由于许可证(license)问题,官方的MLlib依赖集中没有引入netlib-java原生库的依赖。如果运行时环境没有可用原生库,用户将会看到警告信息。如果程序中需要使用netlib-java的库,用户需要在项目中引入com.github.fommil.netlib:all:1.1.2的依赖或者参照指南

(网址为:https://github.com/fommil/netlib-java/blob/master/README.md#machine-optimised-system-libraries)build用户自己的项目。如果用户需要使用python接口,则需要1.4或者更高版本的NumPy。

(注意:MLlib源码中注释有Experimental/DeveloperApi的API在未来的发布版本中可能会进行调整和改变,官方会在不同版本发布时提供迁移指南。)


最新版本的MLlib算法与功能支持:



spark mllib 导出pmml 不支持vector_机器学习_02