大数据学习过程中一个重要的环节就是spark,但是在spark中有很多的知识点,很多人都傻傻分不清楚,其中,最易搞混的就是ml与mllib的区别,所以我们不妨来详细的了解一下二者的区别。
首先、关于Spark ML
1、定义:ark机器学习,对的对象:DataFrame。
2、主要操作的是DataFrame。其中taFrame是Dataset的子集,也就是Dataset[Row]。DataSet是对RDD的封装,对SQL之类的操作做了很多优化。
其次、关于Spark MlLib
1、定义MLlib是Spark的机器学习(ML)库。其目标是使实用的机器学习具有可扩展性和容易性。在高水平上,它提供了以下工具:
A、ML算法:常用的学习算法,如分类,回归,聚类和协同过滤
B、特征:特征提取,变换,维数降低和选择
C、管道:构建,评估和调整ML管道的工具
D、持久性:保存和加载算法,模型和流水线
E、实用程序:线性代数,统计,数据处理等
2、针对的对象:RDD
从Spark 2.0开始,软件包中基于RDD的API spark.mllib已进入维护模式。只修改bug,不增加系新的功能。Spark的主要机器学习API现在是包中的基于DataFrame的API spark.ml。
最后,二者的区别总结
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)mlib主要是基于RDD的,抽象级别不够高;
(2)ml主要是把数据处理的流水线抽象出来,算法相当于流水线的一个组件,可以被其他算法随意的替换,这样就让算法和数据处理的其他流程分割开来,实现低耦合。
4、技术角度上:面向的数据集类型不一样
(1)ML的API是面向Dataset的
(2)mllib是面对RDD的。Dataset和RDD有啥不一样呢?
Dataset的底端是RDD。
Dataset对RDD进行了更深一层的优化,比如说有sql语言类似的黑魔法,Dataset支持静态类型分析所以在compile time就能报错,各种combinators(map,foreach等)性能会更好。
在spark3.0之后,将会废弃mllib,全面的基于ml。因为ml操作的对象是DataFrame,操作起来会比RDD方便很多。所以,建议新接触spark的同学可以直接用ml 的方式。
大数据中的知识点需要大家详细的去理解和应用,处理数据一旦出错那么影响的将是整个大局,所以,求学者在学习过程中一定要打好基础,从而更好的掌握大数据的知识。
本文转自:海牛学院