Spark RDD进入Matrix

时间:2015-12-08 12:55:36

标签: matrix apache-spark rdd

我有一个RDD,如:

(A,AA,1)
(A,BB,0)
(A,CC,0)
(B,AA,2)
(B,BB,1)
(B,CC,4)

我希望将其转换为以下RRD:

([1,0,0],[2,1,4]) 

顺序对我很重要,因为主要建议使用RowMatrix将第二个RDD转换为矩阵。

1 个答案:

答案 0 :(得分:0)

当你要求Matrix时,你需要小心措辞,你的意思是spark.mllib.matrix吗?如果是这样,您将需要按照非常具体的说明创建一个。但是,在我看来,您的问题可以通过更简单的方式解决。只需将zipWithIndexgroupBy

一起使用即可
//Here is how I see it
val test = sc.parallelize(Array(("A","AA",1),("A","BB",0),("A","CC",0),("B","AA",2),("B","BB",1),("B","CC",4))).zipWithIndex
val grouptest = test.groupBy(_._1._1).map(x=>(Vectors.dense(x._2.map(y=>(y._2,y._1._3)).toArray.sortBy(_._1).map(z=>z._2.toDouble))))

在您的示例中,您似乎希望将结果作为向量?所以我使用了Spark的Vector(顺便说一下,它只允许双打)。

结果如下:     [1.0,0.0,0.0]     [2.0,1.0,4.0]