2016-01-20 86 views
7

我試圖在spark和scala中實現神經網絡,但無法執行任何向量或矩陣乘法。火花提供了兩個向量。 Spark.util矢量支持點操作,但不推薦使用。 mllib.linalg向量不支持scala中的操作。Apache spark mllib.linalg向量和spark.util向量之間的區別機器學習

哪一個用來存儲權重和訓練數據?

如何使用像w * x這樣的mllib在spark spark中執行向量乘法,其中w是向量或權重矩陣,x是輸入。 pyspark矢量支持點產品,但在斯卡拉我無法在向量中找到這樣的功能

回答

6

那麼,如果你需要完全支持線性代數運算符,你必須自己實現這些或使用外部庫。在第二種情況下,明顯的選擇是Breeze

它已經使用了幕後所以不會引入額外的依賴,你可以很容易地修改現有的Spark代碼轉換:

import breeze.linalg.{DenseVector => BDV, SparseVector => BSV, Vector => BV} 

def toBreeze(v: Vector): BV[Double] = v match { 
    case DenseVector(values) => new BDV[Double](values) 
    case SparseVector(size, indices, values) => { 
    new BSV[Double](indices, values, size) 
    } 
} 

def toSpark(v: BV[Double]) = v match { 
    case v: BDV[Double] => new DenseVector(v.toArray) 
    case v: BSV[Double] => new SparseVector(v.length, v.index, v.data) 
} 

亨利馬烏提供了有趣的Spark and Scala bindings您可能會發現有趣的爲好。

對於簡單的矩陣向量乘法,可以更容易地利用現有的矩陣方法。例如,IndexedRowMatrixRowMatrix提供multiply方法可以採取本地矩陣。您可以檢查Matrix Multiplication in Apache Spark作爲示例用法。

相關問題