【问题标题】:How to create mllib.linalg.Matrix from an text file如何从文本文件创建 mllib.linalg.Matrix
【发布时间】:2015-05-19 12:46:21
【问题描述】:

我知道我可以像这样创建矩阵:

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]

但是好像不行

有人帮帮我吗?

【问题讨论】:

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

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我想你可能跳过了一步。

    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]。没必要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-18
      • 2012-05-15
      • 2020-04-16
      • 2018-11-11
      • 2018-03-21
      • 2011-12-26
      • 2010-09-17
      • 1970-01-01
      相关资源
      最近更新 更多