[转载]spark中ml与mllib 的区别

1 关于Spark ML

1.1 定义

spark机器学习,对的对象:DataFrame。

1.2 对象

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

2 关于Spark MlLib

1.1 定义

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

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

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

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

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

  E、实用程序:线性代数,统计,数据处理等
1.2 对象

针对的对象:RDD

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

3 二者的区别总结

3.1 编程过程

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

(2)大体概念:DataFrame => Pipeline => A newDataFrame

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

Transformer:入:DataFrame => 出: Data Frame

Estimator:入:DataFrame => 出:Transformer

3.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.3 抽象程度

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

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

3.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 的方式。

转载链接:https://www.imooc.com/article/34706

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值