1. 程式人生 > >大數據spark中ml與mllib 的區別你分清了嗎?

大數據spark中ml與mllib 的區別你分清了嗎?

科技 ;大數據;spark

大數據學習過程中一個重要的環節就是spark,但是在spark中有很多的知識點,很多人都傻傻分不清楚,其中,最易搞混的就是ml與mllib的區別,所以我們不妨來詳細的了解一下二者的區別。

如果你想了解大數據的學習路線,想學習大數據知識以及需要免費的學習資料可以加群:784789432.歡迎你的加入。每天下午三點開直播分享基礎知識,晚上20:00都會開直播給大家分享大數據項目實戰。
首先、關於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 的方式。

   大數據中的知識點需要大家詳細的去理解和應用,處理數據一旦出錯那麽影響的將是整個大局,所以,求學者在學習過程中一定要打好基礎,從而更好的掌握大數據的知識。

大數據spark中ml與mllib 的區別你分清了嗎?