Spark 中 ML 和 MLlib 的特点和区别

简介: Spark 中 ML 和 MLlib 的特点和区别

大数据学习过程中一个重要的环节就是spark,但是在spark中有很多的知识点,很多人都傻傻分不清楚,其中,最易搞混的就是ml与mllib的区别,所以我们不妨来详细的了解一下二者的区别。


1. Spark ML


1)定义:ark机器学习。


2)主要操作的对象:DataFrame。


DataFrame是Dataset的子集,也就是Dataset[Row]。DataSet是对RDD的封装,对SQL之类的操作做了很多优化。


2. Spark MlLib


1)定义:MLlib是Spark的机器学习(ML)库。其目标是使实用的机器学习具有可扩展性和容易性。在高水平上,它提供了以下工具:


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

特征:特征提取,变换,维数降低和选择

管道:构建,评估和调整ML管道的工具

持久性:保存和加载算法,模型和流水线

实用程序:线性代数,统计,数据处理等


2)主要操作的对象:RDD


从Spark 2.0开始,软件包中基于RDD的API spark.mllib已进入维护模式。只修改bug,不增加系新的功能。Spark的主要机器学习API现在是包中的基于DataFrame的API spark.ml。


3. ML 和 MLlib 的主要区别和联系


1.目前常用的机器学习功能 2 个库都能满足需求;


2.Spark 官方推荐使用 ML, 因为在 Spark3.0 之后,将会废弃 MLlib,全面的基于 ML。因为 ML 操作的对象是 DataFrame,操作起来会比 RDD 方便很多。所以建议新接触 Spark 的同学可以直接使用 ML ;


3.ML 主要操作的是 DataFrame,而 MLlib 操作的是 RDD,也就是说二者面向的数据集不一样。相比于 MLlib 在 RDD 提供的基础操作,ML 在 DataFrame 上的抽象级别更高,数据和操作耦合度更低;


4.DataFrame 和 RDD 之间是什么关系?DataFrame 是 Dataset 的子集,也就是 Dataset[Row];而 DataSet 是对 RDD 的封装,对 SQL 之类的操作做了很多优化;


5.相比于 MLlib 在 RDD 提供的基础操作,ML 在 DataFrame 上的抽象级别更高,数据和操作耦合度更低;


6.ML 中的操作可以使用 pipeline,跟 sklearn 一样,可以把很多操作 (算法 / 特征提取 / 特征转换) 以管道的形式串起来,然后让数据在这个管道中流动。大家可以脑补一下 Linux 管道在做任务组合时有多么方便;


7.ML 中无论是什么模型,都提供了统一的算法操作接口,比如模型训练都是 fit;不像 MLlib 中不同模型会有各种各样的 train;


8.MLlib 在 spark2.0 之后进入维护状态,这个状态通常只修复 BUG 不增加新功能;


9.ML 中的随机森林支持更多的功能:包括重要度、预测概率输出等,而 MLlib 不支持。


二者的区别详细总结


1、编程过程


(1)构建机器学习算法的过程不一样:ML提倡使用pipelines,把数据想成水,水从管道的一段流入,从另一端流出。


(2)大体概念:


DataFrame => Pipeline => A newDataFrame


Pipeline: 是由若干个Transformers和Estimators连起来的数据处理过程


Transformer:入:DataFrame => 出: Data Frame


Estimator:入:DataFrame => 出:Transformer


2、算法接口


(1)spark.mllib中的算法接口是基于RDDs的;


(2)spark.ml中的算法接口是基于DataFrames的。


实际使用中推荐ml,建立在DataFrames基础上的ml中一系列算法更适合创建包含从数据清洗到特征工程再到模型训练等一系列工作的MLpipeline;


比如用朴素贝叶斯举个例子:


在模型训练的时候是使用naiveBayes.fit(dataset: Dataset[]):NaiveBayesModel来训练模型的,返回值是一个naiveBayesModel,可以使用naiveBayesModel.transform(dataset: Dataset[]): DataFrame,进行模型的检验,然后再通过其他的方法来评估这个模型, 模型的使用可以参考上面方法,是使用transform来进行预测的,取预测值可以使用select来取值,使用select的时候可以使用“$”label””的形式来取值。类似与sql ,使用起来通俗易懂,且入门的门槛较低。


3、抽象程度


(1)MLlib主要是基于RDD的,抽象级别不够高;


(2)ML主要是把数据处理的流水线抽象出来,算法相当于流水线的一个组件,可以被其他算法随意的替换,这样就让算法和数据处理的其他流程分割开来,实现低耦合。


4、技术角度


面向的数据集类型不一样


(1)ml的API是面向Dataset的;


(2)mllib是面对RDD的。


Dataset和RDD有什么不一样呢?


Dataset的底端是RDD。Dataset对RDD进行了更深一层的优化,比如说有sql语言类似的黑魔法,Dataset支持静态类型分析所以在compile time就能报错,各种combinators(map,foreach等)性能会更好。


目录
相关文章
|
2月前
|
SQL 分布式计算 Hadoop
干翻Hadoop系列文章【02】:Hadoop、Hive、Spark的区别和联系
干翻Hadoop系列文章【02】:Hadoop、Hive、Spark的区别和联系
|
2月前
|
机器学习/深度学习 分布式计算 算法
Spark中的机器学习库MLlib是什么?请解释其作用和常用算法。
Spark中的机器学习库MLlib是什么?请解释其作用和常用算法。
64 0
|
15天前
|
资源调度 分布式计算 监控
Spark Standalone与YARN的区别?
【6月更文挑战第17天】Spark Standalone与YARN的区别?
114 57
|
17天前
|
分布式计算 Hadoop 大数据
Spark与Hadoop的区别?
【6月更文挑战第15天】Spark与Hadoop的区别?
26 8
|
2月前
|
机器学习/深度学习 数据采集 分布式计算
【机器学习】Spark ML 对数据进行规范化预处理 StandardScaler 与向量拆分
标准化Scaler是数据预处理技术,用于将特征值映射到均值0、方差1的标准正态分布,以消除不同尺度特征的影响,提升模型稳定性和精度。Spark ML中的StandardScaler实现此功能,通过`.setInputCol`、`.setOutputCol`等方法配置并应用到DataFrame数据。示例展示了如何在Spark中使用StandardScaler进行数据规范化,包括创建SparkSession,构建DataFrame,使用VectorAssembler和StandardScaler,以及将向量拆分为列。规范化有助于降低特征重要性,提高模型训练速度和计算效率。
|
2月前
|
机器学习/深度学习 分布式计算 算法
【机器学习】Spark ML 对数据特征进行 One-Hot 编码
One-Hot 编码是机器学习中将离散特征转换为数值表示的方法,每个取值映射为一个二进制向量,常用于避免特征间大小关系影响模型。Spark ML 提供 OneHotEncoder 进行编码,输入输出列可通过 `inputCol` 和 `outputCol` 参数设置。在示例中,先用 StringIndexer 对类别特征编码,再用 OneHotEncoder 转换,最后展示编码结果。注意 One-Hot 编码可能导致高维问题,可结合实际情况选择编码方式。
|
2月前
|
分布式计算 大数据 数据处理
【Flink】Flink跟Spark Streaming的区别?
【4月更文挑战第17天】【Flink】Flink跟Spark Streaming的区别?
|
2月前
|
机器学习/深度学习 分布式计算 算法
Spark MLlib简介与机器学习流程
Spark MLlib简介与机器学习流程
|
2月前
|
SQL 分布式计算 Hadoop
Spark与Hadoop的关系和区别
Spark与Hadoop的关系和区别
|
2月前
|
分布式计算 Hadoop 数据处理
Spark与Hadoop的区别是什么?请举例说明。
Spark与Hadoop的区别是什么?请举例说明。
105 0