如何在Scala Spark中将密集矩阵转换为rdd?

时间:2018-04-10 23:41:29

标签: scala apache-spark

我有密集矩阵:

-0.1503191229976037 -0.17794560268465542 0.3372516173766848
-0.6265768782935162 -0.6986084179343495 -1.6553741696973772

如何将其转换为格式的RDD:

0, 0, -0.1503191229976037
0, 1, -0.17794560268465542
0, 2, 0.3372516173766848
1, 0, -0.6265768782935162
1, 1, -0.6986084179343495
1, 2, -1.6553741696973772

前两个值是指数。

我的输入矩阵的类型是: org.apache.spark.mllib.linalg.DenseMatrix

预期的输出类型为:org.apache.spark.rdd.RDD[scala.Tuple2[scala.Tuple2[Int, Int], Double]]

如何使用Scala在Spark上执行此操作?

2 个答案:

答案 0 :(得分:0)

假设您的向量由实际数据结构Vector表示:

val vectors: List[Vector[Double]] = ???
val vecsWithIndices = for {
  (vIdx, vec) <- Stream.from(0).zip(vectors)
  i <- 0 until 3
} yield (vIdx, i, vec(i))

val rdd = spark.parallelize(vecsWithIndices)

Stream.from(0)生成向量的索引,i运行向量的组件。

答案 1 :(得分:0)

解决这个问题:

val denseMatrix=for (
        i <- 0 to 2;
        j <- 0 to 2
      ) yield ((i, j), z.apply(i,j))
val rdd = sc.parallelize(z1)

如果有更好的方法,请告诉我。谢谢。