[英]java.util.IllegalFormatConversionException: f != org.apache.spark.mllib.linalg.DenseVector
[英]Difference between Apache spark mllib.linalg vectors and spark.util vectors for machine learning
我正在嘗試在spark和scala中實現神經網絡,但無法執行任何向量或矩陣乘法。 Spark提供兩個向量。 Spark.util vector支持點操作但不推薦使用。 mllib.linalg向量不支持scala中的操作。
哪一個用於存儲權重和訓練數據?
如何使用像w * x這樣的mllib在spark scala中執行向量乘法,其中w是向量或權重矩陣,x是輸入。 pyspark矢量支持點積,但在scala我無法在向量中找到這樣的函數
好吧,如果您需要完全支持線性代數運算符,您必須自己實現這些或使用外部庫。 在第二種情況下,明顯的選擇是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)
}
Mahout提供了有趣的Spark和Scala綁定,您可能會感興趣。
對於簡單的矩陣向量乘法,可以更容易地利用現有的矩陣方法。 例如, IndexedRowMatrix
和RowMatrix
提供了可以采用局部矩陣的multiply
方法。 您可以在Apache Spark中檢查Matrix Multiplication以獲取示例用法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.