那麼,如果你需要完全支持線性代數運算符,你必須自己實現這些或使用外部庫。在第二種情況下,明顯的選擇是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您可能會發現有趣的爲好。
對於簡單的矩陣向量乘法,可以更容易地利用現有的矩陣方法。例如,IndexedRowMatrix
和RowMatrix
提供multiply
方法可以採取本地矩陣。您可以檢查Matrix Multiplication in Apache Spark作爲示例用法。