2016-01-20 83 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作为示例用法。

相关问题