将Matrix的RDD转换为Vector的RDD

Posted

技术标签:

【中文标题】将Matrix的RDD转换为Vector的RDD【英文标题】:Convert RDD of Matrix to RDD of Vector 【发布时间】:2021-11-30 20:47:20 【问题描述】:

我有一个 RDD[Matrix[Double]] 并想将其转换为 RDD[Vector](矩阵中的每一行都将转换为一个向量)。

我见过像Convert Matrix to RowMatrix in Apache Spark using Scala 这样的相关答案,但它是向量 RDD 的一个矩阵。而我的案例是Matrix的RDD。

【问题讨论】:

【参考方案1】:

在code to convert MatrixSeq[Vector] 上使用flatMap:

// from https://***.com/a/28172826/1206998
def toSeqOfVector(m: Matrix): Seq[Vector] = 
  val columns = m.toArray.grouped(m.numRows)
  val rows = columns.toSeq.transpose // Skip this if you want a column-major RDD.
  rows.map(row => new DenseVector(row.toArray))


val matrices: RDD[Matrix] = ??? // your input
val vectors:  RDD[Vector] = matrices.flatMap(toSeqOfVector)

注意:这段代码我没有测试,但原理是这样的

【讨论】:

以上是关于将Matrix的RDD转换为Vector的RDD的主要内容,如果未能解决你的问题,请参考以下文章

How to convert matrix to RDD[Vector] in spark

如何将 RDD [ Vector ] 中的合成控制数据集转换为 K-Means 算法

将 RDD 转换为 Dataframe Spark

值 toDF 不是 org.apache.spark.rdd.RDD[(Long, org.apache.spark.ml.linalg.Vector)] 的成员

PySpark:将 RDD 转换为数据框中的列

Spark RDD API详解(转)