まあ、線形代数演算子を完全にサポートする必要がある場合は、これを自分で実装するか、外部ライブラリを使用する必要があります。後者の場合、明らかな選択はBreezeです。
まだ追加の依存関係を導入しない背後で使用されて、あなたは簡単に変換するために、既存のスパークのコードを変更することができます。
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 and Scala bindingsあなたにも面白いかもしれない興味深い提供します。
単純な行列ベクトル乗算では、既存の行列方法を活用する方が簡単です。例えば、IndexedRowMatrix
およびRowMatrix
は、multiply
のローカルマトリックスを取る方法を提供します。使用例についてはMatrix Multiplication in Apache Sparkを確認できます。