scala - 如何在Spark中将矩阵转换为RDD [Vector]

标签 scala apache-spark

如何在Spark中从org.apache.spark.mllib.linalg.Matrix转换为RDD[org.apache.spark.mllib.linalg.Vector]

该矩阵是从SVD生成的,我正在使用SVD的结果进行聚类分析。

最佳答案

MLlib的Matrix是一个小的局部矩阵。在本地进行分析而不是将其转换为RDD可能会更有效。

无论如何,如果您的集群仅支持将RDD作为其输入,则可以按照以下方法进行转换:

import org.apache.spark.mllib.linalg._
def toRDD(m: Matrix): RDD[Vector] = {
  val columns = m.toArray.grouped(m.numRows)
  val rows = columns.toSeq.transpose // Skip this if you want a column-major RDD.
  val vectors = rows.map(row => new DenseVector(row.toArray))
  sc.parallelize(vectors)
}

关于scala - 如何在Spark中将矩阵转换为RDD [Vector],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28158619/

相关文章:

list - 在 Scala 中展平列表列表而不使用展平方法会产生不好的结果

java - Spark javardd 方法collect() 和collectAsync() 之间有什么区别?

python - 将生成的 TFIDF 稀疏向量链接到 Spark 中的原始文档

java - 使用简单参数从单元测试调用主(spark)应用程序

java - Java Optional 和 Scala Option 的区别

scala - 为什么确保仅在其他方面起作用?

scala - Scala 中的 Spark SQL(v2.0) UDAF 返回空字符串

scala - Scala 中的模式匹配 Jackson JSON

python - 如何使用 pyspark 函数处理日期格式的 T 和 Z

python - `spark-submit` 没有 Spark 库的普通 Python 脚本