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

时间:2015-05-19 12:46:22

标签: apache-spark rdd apache-spark-mllib

我知道我可以像这样创建Matrix:

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

我想知道如何从这个文件创建Matrix。

我可以这样做:

val test3=sc.textFile("textFile").map(_.split("\t").map(_.toDouble)).asInstanceOf[DenseMatrix]

但它似乎无法运作

有谁帮助过我?

2 个答案:

答案 0 :(得分:2)

Matrices.dense方法采用列主要值列表。如果您在文本文件中有数据,则它是行主要的。所以,做到以下几点:

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

答案 1 :(得分:1)

我想你可能已经跳过了一步。

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)

您可以删除.asInstanceOf[DenseMatrix]。没有必要。