Spark MLlib學習(一)數據類型 Data Types

MLlib是spark的機器學習庫,有常用學習算法和實用工具,包括分類、迴歸、聚類、協同過濾、降維等。分爲兩個部分:
spark.mllib 基於RDDs的原有API
spark.ml 提供了基於DataFrame的高水平API用於建立ML pipelines
推薦使用spark.ml(基於DataFrame的API更加多樣化,更靈活),不過spark也持續支持spark.mllib。

MLlib——數據類型
局部向量[Local vector]
標記點[Labeled point]
局部矩陣[Local matrix]
分佈式矩陣[Distributed matrix]
分塊矩陣[BlockMatrix]
行矩陣[RowMatrix]
索引行矩陣[IndexedRowMatrix]
座標矩陣[CoordinateMatrix]

1、局部向量[Local vector]
支持兩種類型的局部向量:密集型和稀疏型。局部向量存儲在單機上,索引從0開始,數值爲double類型。

import org.apache.spark.mllib.linalg.{Vector,Vectors}
val dv:Vector = Vectors.dense(1.0,0.0,3.0)
dv: org.apache.spark.mllib.linalg.Vector = [1.0,0.0,3.0]
val sv1:Vector = Vectors.sparse(3,Array(0,2),Array(1.0,3.0))
sv1: org.apache.spark.mllib.linalg.Vector = (3,[0,2],[1.0,3.0])
val sv2:Vector = Vectors.sparse(3,Seq((0,1.0),(2,3.0)))
sv2: org.apache.spark.mllib.linalg.Vector = (3,[0,2],[1.0,3.0])

ps: scala默認引入scala.collection.immutable.Vector,所以引入org.apache.spark.mllib.linalg.Vector具體使用Mlib的向量

2、標記點[Labeled point]
用於有監督學習方法,也是局部變量,通過double型標籤關聯每個向量。標記點樂意用於分類和迴歸。二分類中,標籤爲0 or 1,在多分類中,類標記也是從0開始,0,1,2…

import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
val pos = LabeledPoint(1.0,Vectors.dense(1,0,3))
pos: org.apache.spark.mllib.regression.LabeledPoint = (1.0,[1.0,0.0,3.0])
val neg = LabeledPoint(0.0,Vectors.sparse(3,Array(0,2),Array(1.0,3.0)))
neg: org.apache.spark.mllib.regression.LabeledPoint = (0.0,(3,[0,2],[1.0,3.0]))

實際應用中會使用稀疏訓練數據,MLlib支持讀取libsvm格式的訓練語料數據。libsvm是一種文本格式,每行表示一個標記的稀疏特徵向量。

import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.util.MLUtils import
org.apache.spark.rdd.RDD
val examples:RDD[LabeledPoint] =
MLUtils.loadLibSVMFile(sc,”file:///home/hdfs/data_mllib/sample_libsvm_data.txt”)

3、局部矩陣[Local matrix]
使用整型存儲行列索引,double型存儲數值,存儲在單機上。MLlib支持密集型矩陣,元素按列優先以double數組的方式存儲。

import org.apache.spark.mllib.linalg.{Matrix, Matrices}
val dm: Matrix = Matrices.dense(3, 2, Array(1.0, 3.0, 5.0, 2.0, 4.0, 6.0))
dm: org.apache.spark.mllib.linalg.Matrix =
1.0 2.0
3.0 4.0
5.0 6.0
val sm: Matrix = Matrices.sparse(3, 2, Array(0, 1, 3), Array(0, 2, 1), Array(9, 6, 8))
sm: org.apache.spark.mllib.linalg.Matrix =
3 x 2 CSCMatrix
(0,0) 9.0
(2,1) 6.0
(1,1) 8.0

4、分佈式矩陣 distributed matrix
分佈式矩陣是long型存儲行列索引,double型存儲數值,分佈存儲在一個和多個RDDs。選擇合適的矩陣格式很重要,轉換格式是會需要全局的suffle,代價較大。有三種分佈式的矩陣。基礎的是
RowMatrix,行矩陣,按行存儲,行號無意義,如特徵向量集就可以表示爲行矩陣,通過RDD來支撐軍陣部分行,每行是一個局部向量。
IndexedRowMatrix 跟RowMatrix類似,但是帶有行號,從而可以標記行進行join操作。
CoordinateMatrix以COO(用於存儲稀疏矩陣,以鏈表形式存放元組),格式存儲的分佈式矩陣,底層爲RDD。
(1)行矩陣 RowMatrix
按行分佈式存儲,無行索引,每行由局部向量表示,列數受限於整數範圍。
(2)索引行矩陣 IndexedRowMatrix
(3)座標矩陣 CooridinateMatrix
(4)分塊矩陣 BlockMatrix

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