1.4.2 Spark ML
Spark是加州大学伯克利分校AMP(Algorithms Machines and People)实验室开发的通用内存并行计算框架,常用于构建大型的、低延迟的数据分析应用程序。Spark提供了对Scala、Python、Java(包括Java 8)和R语言的支持,是Apache的顶级项目。
Spark立足内存计算,适合迭代计算。Spark提供了一个机器学习库(MLlib),MLlib提供了常用机器学习算法的分布式实现。开发者只需具有Spark基础,并且了解机器学习算法的原理,以及方法相关参数的含义,就可以通过调用相应的API来实现基于海量数据的ML过程。
Spark提供的各种高效的工具使得机器学习过程更加直观便捷。目前,Spark已经拥有了实时计算、批处理、机器学习算法库、SQL、流计算等模块,功能越来越强大。
MLlib由一些通用的学习算法和工具组成,包括分类、回归、聚类、降维等,同时还包括底层的优化原语和高层的管道API。它主要包含以下具体内容。
(1)算法:常用的机器学习算法,如分类、回归、聚类和关联规则挖掘等。
(2)特征处理工具:特征提取、转化、降维和属性选择工具。
(3)管道:用于构建、评估和调整机器学习流程的工具。
(4)持久性:保存和加载算法、模型和管道。
(5)实用工具:线性代数、统计、数据处理等。
Spark MLlib从1.2版本以后提供了基于DataFrame的高层次的API,可以用来构建机器学习工作流(Pipeline)。ML Pipeline弥补了原始MLlib库的不足,向用户提供了一个基于DataFrame的ML工作流式API套件。使用ML Pipeline API可以很方便地进行数据处理、特征转化、正则化,以及将多个ML算法联合起来,构建一个单一完整的ML流水线。这种方式提供了更灵活的方法,更符合机器学习过程的特点,也更容易从其他语言迁移。Spark官方推荐使用spark.ml。Spark在机器学习方面发展很快,目前已经支持主流的统计和机器学习算法。表1-1列出了目前Spark支持的主要机器学习算法。
表1-1 Spark目前支持的主要机器学习算法