我有密集矩阵:
-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上执行此操作?
答案 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)
如果有更好的方法,请告诉我。谢谢。