2017-07-19 12 views
0

私は〜1GBのcsvファイルを持っています(ただし、寄木張りなどの他のデータタイプにもオープンしています)。5m行と23列はSparkに読み込みたいので、スコアリングマトリックス。Spark ShellのMatrixにCSVを読む

// csv -> array -> Dense Matrix 

import org.apache.spark.mllib.linalg.{Matrix, Matrices, Dense Matrix} 
val test = scala.io.Source.fromFile("/hdfs/landing/test/scoreTest.csv").getLines.toArray.flatmap(._split(",")).map(_.toDouble) 
val m1: DenseMatrix = new DenseMatrix(1000,23,test) 

その後、私はすべての罰金であるm1.multiply()m1を掛けることができます:私は現在、このプロセスを使用してファイルの小型版で

。しかし、大きなファイルでこれを試してみると、ファイルが1GBしかないのに、メモリエラーの例外やその他の問題が発生します。

これは、乗算のための準備が整った状態で行列オブジェクトを作成する最善の方法ですか?配列全体を読み込み、DenseMatrixに変換することは不要であり、メモリの問題を引き起こしています。

非常に新しいscala/sparkになるので、どんな助けもありがとうございます。

注:これはPython、R、matlabなどのメモリで行うことができますが、これはもっと大きなファイルに使用できるように概念の証明です。

答えて

0

org.apache.spark.mllib.linalg.distributed行列の実装をdistrubuted使用してみてください、これはRDD APIを使用して、あなたが火花によって提供される並列性から利益をつもりでしょう。

詳細については、official documentationを参照してください。

私はまた、スパーク

を使用して スケーラブルな行列乗算と題しthis blogを読むためにあなたをお勧めします