那么,如果你需要完全支持线性代数运算符,你必须自己实现这些或使用外部库。在第二种情况下,明显的选择是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作为示例用法。