2016-10-12 10 views
2

行順が重要ではないMLLIB分散行行列があります。これを簡単に密度の高いマトリックスに変換する方法はありますか?私は行単位のマッピングがうまくいくかもしれないと思いますが、私は風が比較的慣れていません。行行列をBreeze Dense行列に変換する

編集:X.rows.map(x => x.toArray)を使用して、私はそれをorg.apache.spark.rdd.RDDという形式のRDDに変換することができました[Array [Double]]。私はこれが正しい方向への一歩だと信じています...

+0

RDDの 'collect'を実行してから、それをブリーズマトリックスに変換しようとしましたか? – ar7

+0

ええと、RDDのcollectを使って、私は 'breeze.linalg.DenseMatrix [Array [Double]]'になります。私が必要とするのは 'breeze.linalg.DenseMatrix [Double]'です。しかし、提案をありがとう。私は配列をベクトルに変換する必要があると信じています。 – mongolol

答えて

6

あなたのRDDで収集してください。 Array[Array[Double]]が返されます。答えの

val dm = DenseMatrix(array.map(_.toArray):_*)

パートhereから撮影したマトリックスに配列の配列を変換するための一つは、以下を行うことであろう

val array = your_rdd.collect()

。これが問題を解決することを願っています。

+0

もっと簡潔なので、私の答えはこれに変更されました。ありがとう。 – mongolol

+2

型が既に 'Array [Array [Double]]'であれば、配列に変換する必要はありません。 'DenseMatrix(array:_ *)' –

2

以下のコードを使って作業を終了しました。

import breeze.linalg.{DenseVector => BDV, DenseMatrix => BDM, sum} 
val arr = X.rows.map(x => x.toArray).collect.flatten 
val dm = new BDM(X.numRows().toInt, X.numCols().toInt, arr) 

ありがとうございます。@ ar7 for hte help。