[提前声明]
文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章
写作不易,转载请注明,谢谢!
代码案例地址: ?https://github.com/Mydreamandreality/sparkResearch
初识SparkMLlib
基本概念
MLlib是Spark的机器学习(ML)库。其目标是使实用的机器学习具有可扩展性和容易性。在高水平上,它提供了以下工具:
- ML算法:常用的学习算法,如分类,回归,聚类和协同过滤
- 特征:特征提取,变换,降维和选择
- 管道:构建,评估和调整ML管道的工具
- 持久性:保存和加载算法,模型和管道
- 实用程序:线性代数,统计,数据处理等
SparkMLlib设计理念
MLlib的设计理念比较简单,把数据以RDD的形式表示,然后在分布式数据集上调用算法,MLlib引入了一些新的数据类型,比如点,向量等,但是归根结底,MLlib就是RDD之上的一系列可供调用的算法函数集合
SparkMLlib版本变化
从Spark2.0开始,spark.mllib软件包中的基于RDD的API已进入维护模式,应该是只修复BUG和维护,不增加新的功能,Spark的主要学习API现在是spark.ml包中基于DataFrame的API
SparkML和SparkMLlib的区别
首先简单了解SparkML
- SparkML的定义是ARK机器学习
- SparkML的操作对象是DataFrame,而非RDD
DataFrame是Dataset的子集,也就是Dataset[Row],DataSet是对RDD的封装,对SQL之类的操作做了很多优化
ML和MLlib的区别在于:
-
编码过程
- 构建机器学习算法的过程不一样
- ML提倡使用pipelines[管道],把数据抽象为水,水从管道的一端流入,从另一端流出
- 大致如此: DataFrame <= pipelines =< newDataFrame
-
算法接口
- SparkML的算法接口是基于DataFrame的
- SparkMLlib的算法接口是基于RDD的
- 实际使用中推荐ml,建立在DataFrames基础上的ml中一系列算法更适合创建包含从数据清洗到特征工程再到模型训练等一系列工作的MLpipeline
-
抽象程度
- MLlib是基于RDD的,抽象程度不够高
- ml主要是把数据处理的流水线抽象出来,算法只是流水线的一个组件,可以被其他算法随意替换,以此实现低耦合
在spark3.0之后,将会废弃mllib,全面的基于ml,
因为ml操作的对象是DataFrame,操作起来会比RDD方便很多
下一章做一个MLlib和ML简单的Java案例