0
我有一個〜1GB的csv文件(但我可以對其他數據類型打開,例如鑲木地板),我想要讀取Spark的5m行和23列,以便我可以將它們相乘以創建一個評分矩陣。在Spark Shell中將CSV讀取到Matrix中
在文件的較小版本我目前使用的這個過程:
// 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
與m1.multiply()
這是所有罰款。但是,當我嘗試使用大文件時遇到內存錯誤異常和其他問題時,即使該文件只有1GB。
這是最好的方式來創建一個矩陣對象的火花準備乘法?整個讀入陣列,然後轉換爲DenseMatrix似乎是不必要的,並導致內存問題。
scala/spark非常新,所以任何幫助表示讚賞。
注意:我知道這可以在python,R,matlab等內存中完成,但這更多的是一個概念證明,以便它可以用於更大的文件。