Apache spark 如何从文本文件创建mllib.linalg.Matrix

Apache spark 如何从文本文件创建mllib.linalg.Matrix,apache-spark,rdd,apache-spark-mllib,Apache Spark,Rdd,Apache Spark Mllib,我知道我可以创建如下矩阵: val values = Array(0.0, 1.0, 2.0, 3.0, 4.0, 5.0) val mat = Matrices.dense(m, n, values).asInstanceOf[DenseMatrix] 0.0 1.0 2.0 3.0 4.0 5.0 但现在我有一个文本文件,它是一个矩阵,如下所示: val values = Array(0.0, 1.0, 2.0, 3.0, 4.0, 5.0) val mat = Matrices

我知道我可以创建如下矩阵:

val values = Array(0.0, 1.0, 2.0, 3.0, 4.0, 5.0)
val mat = Matrices.dense(m, n, values).asInstanceOf[DenseMatrix]
0.0 1.0

2.0  3.0

4.0  5.0
但现在我有一个文本文件,它是一个矩阵,如下所示:

val values = Array(0.0, 1.0, 2.0, 3.0, 4.0, 5.0)
val mat = Matrices.dense(m, n, values).asInstanceOf[DenseMatrix]
0.0 1.0

2.0  3.0

4.0  5.0
我想知道如何从这个文件创建矩阵

我可以这样做吗:

val test3=sc.textFile("textFile").map(_.split("\t").map(_.toDouble)).asInstanceOf[DenseMatrix]
但它似乎不起作用


有人帮我吗?

我想你可能跳过了一步

import org.apache.spark.mllib.linalg.{Matrix, Matrices}

val dValues = sc.textFile("textFile").map(_.split("\t").map(_.toDouble))
val matrix = Matrices.dense(3, 2, dValues)

您可以删除[DenseMatrix]的
.asInstanceOf[DenseMatrix]。这是不必要的。

矩阵。
密集方法采用列主值列表。如果文本文件中有数据,则为行主数据。因此,请执行以下操作:

val dValues = sc.textFile("textFile").flatMap(_.split("\t").map(_.toDouble))
val matrix = Matrices.dense(rows, columns, dValues)
给你错误的矩阵类型。但是,有一个简单的解决方法:

val matrix = Matrices.dense(columns, rows, dValues).transpose

矩阵按列读取数据数组,因此需要将数据输入更改为[0.0,2.0,4.0,1.0,3.0,5.0]才能工作。您可能需要先对文本文件进行一些映射