溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

大數(shù)據(jù)spark中ml與mllib 的區(qū)別你分清了嗎?

發(fā)布時(shí)間:2020-06-07 08:46:28 來(lái)源:網(wǎng)絡(luò) 閱讀:726 作者:鯨落大叔 欄目:大數(shù)據(jù)
   大數(shù)據(jù)學(xué)習(xí)過程中一個(gè)重要的環(huán)節(jié)就是spark,但是在spark中有很多的知識(shí)點(diǎn),很多人都傻傻分不清楚,其中,最易搞混的就是ml與mllib的區(qū)別,所以我們不妨來(lái)詳細(xì)的了解一下二者的區(qū)別。

如果你想了解大數(shù)據(jù)的學(xué)習(xí)路線,想學(xué)習(xí)大數(shù)據(jù)知識(shí)以及需要免費(fèi)的學(xué)習(xí)資料可以加群:784789432.歡迎你的加入。每天下午三點(diǎn)開直播分享基礎(chǔ)知識(shí),晚上20:00都會(huì)開直播給大家分享大數(shù)據(jù)項(xiàng)目實(shí)戰(zhàn)。
首先、關(guān)于Spark ML

   1、定義:ark機(jī)器學(xué)習(xí),對(duì)的對(duì)象:DataFrame。

   2、主要操作的是DataFrame。其中taFrame是Dataset的子集,也就是Dataset[Row]。DataSet是對(duì)RDD的封裝,對(duì)SQL之類的操作做了很多優(yōu)化。

   其次、關(guān)于Spark MlLib
   1、定義MLlib是Spark的機(jī)器學(xué)習(xí)(ML)庫(kù)。其目標(biāo)是使實(shí)用的機(jī)器學(xué)習(xí)具有可擴(kuò)展性和容易性。在高水平上,它提供了以下工具:

   A、ML算法:常用的學(xué)習(xí)算法,如分類,回歸,聚類和協(xié)同過濾

   B、特征:特征提取,變換,維數(shù)降低和選擇

   C、管道:構(gòu)建,評(píng)估和調(diào)整ML管道的工具

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

   E、實(shí)用程序:線性代數(shù),統(tǒng)計(jì),數(shù)據(jù)處理等

   2、針對(duì)的對(duì)象:RDD

   從Spark 2.0開始,軟件包中基于RDD的API spark.mllib已進(jìn)入維護(hù)模式。只修改bug,不增加系新的功能。Spark的主要機(jī)器學(xué)習(xí)API現(xiàn)在是包中的基于DataFrame的API spark.ml。

   最后,二者的區(qū)別總結(jié)

   1、編程過程

   (1)構(gòu)建機(jī)器學(xué)習(xí)算法的過程不一樣:ML提倡使用pipelines,把數(shù)據(jù)想成水,水從管道的一段流入,從另一端流出。

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

   Pipeline: 是由若干個(gè)Transformers和Estimators連起來(lái)的數(shù)據(jù)處理過程

   Transformer:入:DataFrame => 出: Data Frame

   Estimator:入:DataFrame => 出:Transformer

   2、算法接口

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

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

   實(shí)際使用中推薦ml,建立在DataFrames基礎(chǔ)上的ml中一系列算法更適合創(chuàng)建包含從數(shù)據(jù)清洗到特征工程再到模型訓(xùn)練等一系列工作的MLpipeline;

   比如用樸素貝葉斯舉個(gè)例子:

在模型訓(xùn)練的時(shí)候是使用naiveBayes.fit(dataset: Dataset[]):NaiveBayesModel來(lái)訓(xùn)練模型的,返回值是一個(gè)naiveBayesModel,可以使用naiveBayesModel.transform(dataset: Dataset[]): DataFrame,進(jìn)行模型的檢驗(yàn),然后再通過其他的方法來(lái)評(píng)估這個(gè)模型, 模型的使用可以參考上面方法,是使用transform來(lái)進(jìn)行預(yù)測(cè)的,取預(yù)測(cè)值可以使用select來(lái)取值,使用select的時(shí)候可以使用“$”label””的形式來(lái)取值。類似與sql ,使用起來(lái)通俗易懂,且入門的門檻較低。

   3、抽象程度

   (1)mlib主要是基于RDD的,抽象級(jí)別不夠高;

   (2)ml主要是把數(shù)據(jù)處理的流水線抽象出來(lái),算法相當(dāng)于流水線的一個(gè)組件,可以被其他算法隨意的替換,這樣就讓算法和數(shù)據(jù)處理的其他流程分割開來(lái),實(shí)現(xiàn)低耦合。

   4、技術(shù)角度上:面向的數(shù)據(jù)集類型不一樣

   (1)ML的API是面向Dataset的

   (2)mllib是面對(duì)RDD的。Dataset和RDD有啥不一樣呢?

   Dataset的底端是RDD。

   Dataset對(duì)RDD進(jìn)行了更深一層的優(yōu)化,比如說(shuō)有sql語(yǔ)言類似的黑魔法,Dataset支持靜態(tài)類型分析所以在compile time就能報(bào)錯(cuò),各種combinators(map,foreach等)性能會(huì)更好。

   在spark3.0之后,將會(huì)廢棄mllib,全面的基于ml。因?yàn)閙l操作的對(duì)象是DataFrame,操作起來(lái)會(huì)比RDD方便很多。所以,建議新接觸spark的同學(xué)可以直接用ml 的方式。

   大數(shù)據(jù)中的知識(shí)點(diǎn)需要大家詳細(xì)的去理解和應(yīng)用,處理數(shù)據(jù)一旦出錯(cuò)那么影響的將是整個(gè)大局,所以,求學(xué)者在學(xué)習(xí)過程中一定要打好基礎(chǔ),從而更好的掌握大數(shù)據(jù)的知識(shí)。
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI