私は〜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などのメモリで行うことができますが、これはもっと大きなファイルに使用できるように概念の証明です。