1、概念
稀疏向量和密集向量都是向量的表示方法 密集向量和稀疏向量的區別: 密集向量的值就是乙個普通的double陣列 而稀疏向量由兩個並列的 陣列indices和values組成 例如:向量(1.0,0.0,1.0,3.0)用密集格式表示為[1.0,0.0,1.0,3.0], 用稀疏格式表示為(4,[0,2,3],[1.0,1.0,3.0]) 第乙個4表示向量的長度(元素個數),[0,2,3]就是indices陣列,[1.0,1.0,3.0]是values陣列 表示向量0的位置的值是1.0,2的位置的值是1.0,而3的位置的值是3.0,其他的位置都是0
2、建立
import org.apache.spark.mllib.linalg.
// create a dense vector (1.0, 0.0, 3.0).
val dv: vector = vectors.dense(1.0, 0.0, 3.0)
// create a sparse vector (1.0, 0.0, 3.0) by specifying its indices and values corresponding to nonzero entries.
val sv1: vector = vectors.sparse(3, array(0, 2), array(1.0, 3.0))
// create a sparse vector (1.0, 0.0, 3.0) by specifying its nonzero entries.
val sv2: vector = vectors.sparse(3, seq((0, 1.0), (2, 3.0)))
val training: dataframe = linerdd.map(line =>
else
}).filter(s => !s._1.equals("-1"))
.todf("id", "text", "label")
//transformer,轉換器,字元解析,轉換輸入文字,以空格分隔,轉成小寫詞
val tokenizer: tokenizer = new tokenizer()
.setinputcol("text")
.setoutputcol("words")
//transformer,轉換器,雜湊轉換,以雜湊方式將詞轉換成詞頻,轉成特徵向量
val hashtf: hashingtf = new hashingtf()
.setnumfeatures(1000) //預設是2^18
.setinputcol(tokenizer.getoutputcol).setoutputcol("features")
//列印hashingtf生成的稀疏向量長什麼樣
val wordsdata = tokenizer.transform(training)
val hashdata = hashtf.transform(wordsdata)
hashdata.collect().foreach(println)
spark mllib 密集向量和稀疏向量
mllib支援區域性向量和矩陣儲存在單台伺服器,也支援儲存於乙個或者多個rdd的分布式矩陣 區域性向量和區域性矩陣是用作公共介面的最簡單的資料模型。基本的線性代數運算由breeze提供。在監督學習中使用的訓練示例在mllib中稱為 標記點 因此,向量和 矩陣,標記點是 spark mllib基本的資...
spark mllib 密集向量和稀疏向量
mllib支援區域性向量和矩陣儲存在單台伺服器,也支援儲存於乙個或者多個rdd的分布式矩陣 區域性向量和區域性矩陣是用作公共介面的最簡單的資料模型。基本的線性代數運算由breeze提供。在監督學習中使用的訓練示例在mllib中稱為 標記點 因此,向量和 矩陣,標記點是 spark mllib基本的資...
Spark稀疏向量和稠密向量
旁邊的小伙一副生無可戀的表情 這是為什麼?我的 和之前寫的一樣,而且都是從官網copy的,結果怎麼是這樣子啊,我只是用向量彙編將多列轉為一列 val va new vectorassembler setinputcols array age sign province code lowest usa...