将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 Matrix
到Seq[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 算法
值 toDF 不是 org.apache.spark.rdd.RDD[(Long, org.apache.spark.ml.linalg.Vector)] 的成员