Spark Mllib核心思想

SparkMLlib的簡介

MLLIB是Spark的機器學習庫。提供了利用Spark構建大規模和易用性的機器學習平臺,組件:

  1. ML 算法:包括了分類、聚類、降維、協同過濾
  2. Featurization特徵化:特徵抽取、特徵轉換、特徵降維、特徵選擇
  3. Pipelines管道:tools for constructing, evaluating, and tuning ML Pipelines
  4. Persistence持久化:模型的保存、讀取、管道操作
  5. Utilities提供了線性代數、統計學以及數據處理工具

基於DataFrame的API是主要API

*Spark ml基於DataFrame的API

*Spark mllib基於RDD的API

基於MLlib RDD的API現在處於維護模式。

從Spark 2.0開始,軟件包中基於RDD的API spark.mllib已進入維護模式。Spark的主要機器學習API現在是包中基於DataFrame的API spark.ml

有什麼影響?

  1. MLlib仍將支持基於RDD的API spark.mllib以及錯誤修復。
  2. MLlib不會爲基於RDD的API添加新功能。
  3. 在Spark 2.x版本中,MLlib將爲基於DataFrames的API添加功能,以實現與基於RDD的API的功能奇偶校驗。
  4. 在達到功能奇偶校驗(粗略估計Spark 2.3)之後,將棄用基於RDD的API。
  5. 預計將在Spark 3.0中刪除基於RDD的API。

爲什麼MLlib會切換到基於DataFrame的API?

    1. DataFrames提供比RDD更加用戶友好的API。DataFrame的許多好處包括Spark數據源,SQL / DataFrame查詢,Tungsten和Catalyst優化以及跨語言的統一API。
    2. 基於DataFrame的MLlib API跨ML算法和多種語言提供統一的API。
    3. DataFrames有助於實用的ML管道,特別是功能轉換。有關詳細信息,請參閱管道指南

什麼是“Spark ML”?

  1. “Spark ML”不是官方名稱,但偶爾用於指代基於MLlib DataFrame的API。這主要是由於org.apache.spark.ml基於DataFrame的API使用的Scala包名稱,以及我們最初用來強調管道概念的“Spark ML Pipelines”術語。

MLlib已被棄用嗎?

  1. MLlib包括基於RDD的API和基於DataFrame的API。基於RDD的API現在處於維護模式。但是這兩種API都沒有被棄用,整個也沒有MLlib。
  2. 兩套API的介紹

SparkMLlib的環境支持

  1. Spark單機版本

首先在官網下載Spark預編譯版本,將lib目錄下的spark-assembly-1.3.0-hadoop2.4.0.jar文件複製到IDEA安裝目錄的lib文件夾下。

單擊IDEA菜單上File選項,選擇Project Strcture,在彈出的對話框單擊左側的Libraries,之後單擊中部上方綠色+號,添加剛纔下載的jar包文件即可。

  1. Maven構建依賴環境

在pom文件中加入mllib包的依賴,保存後IDEA會幫我們自動下載。

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-mllib_2.10</artifactId>
    <version>${spark.version}</version>
</dependency>

**代碼基於2.0.2語法代碼

 

SparkMLLIB

MLlib是Spark機器學習庫,它是MLBase的一部分,MLBase一共分爲一下4部分:

  1. ML Optimizer:會選擇它認爲最適合的已經在內部實現好了的機器學習算法和相關參數來處理用戶輸入的數據,並返回模型或者其他的幫助分析結果。
  2. MLLIB是一個進行特徵提取的和高級ML編程抽象的算法實現的API平臺。
  3. MLLIB是Spark實現一些常見的機器學習算法和實用程序。
  4. MLRuntime是基於Spark計算框架,將Spark的分佈式計算應用到機器學習領域。

MLlib提供了常見機器學習算法的實現,包括分類、聚類、協同過濾和降維等。使用MLlib來做機器學習工作通常只需要在對原始數據處理之後,然後直接調用相應的API就可以實現了。但是想要選擇合適的算法,必須瞭解算法的原理以及MLlib API。接下來比較下Spark.mllib和spark.ml

Spark.mllib已經很長時間了,1.0之前的版本已經包含了,提供算法實現都是基於原始的RDD,我們只需要掌握mllib的API就可以完成機器學習工作。但是想要構建完整並且複雜的機器學習流水線是比較困難的,因此有了Spark.ml。

Spark ML Pipeline從Spark1.2版本開始,目前已經從Alpha階段畢業,成爲可用的並且較爲穩定的新的機器學習庫。ML Pipeline彌補了MLlib庫的不足,向用戶提供了一個基於DataFrame的機器學習的工作流式API套件,使用ML Pipeline API我們可以很方便地把數據處理、特徵轉化、正則化以及多個機器學習算法聯合起來,構建一個單一完整的機器學習流水線。

從官方文檔看,Spark ML Pipeline雖然是被推薦的機器學習方式,但是不會在短期內替代原始的MLlib庫,因爲MLlib已經包含了豐富穩定的算法實現,並且部分ML Pipeline實現基於MLLib。實際工作中,並不是所有的機器學習過程都需要構建成一個流水線,有時候原始的數據格式整齊且完整,而且使用單一的算法就能實現目標,也沒有把事情複雜化,採用最簡單且容易理解的方式纔是正確的選擇。

 

算法架構如下:

MLLIB主要包含兩個部分:

  1. 底層基礎:主要包括Spark的運行庫、矩陣庫和向量庫。其中向量接口和矩陣接口基於Nelib和BLAS/LAPACK開發的線性代數庫Breeze。MLlib支持本地的密集向量和本地向量,並且支持標量向量;同時支持本地矩陣和分佈式矩陣,分佈式矩陣分爲:RowMatrix、IndexedRowMatrix和CoordinateMatrix等。
  2. 算法庫:包含分類、迴歸、聚集、協同過濾、梯度下降和特徵提取和變換等算法。

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章