将Spark RDD转换为矩阵

3

我有一个类似于以下的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转换为矩阵。


这不是一个完整的答案,但可以帮助你入门。我认为你可以使用map()函数来解决这个问题。 - andrew.butkus
你能提供更多细节吗?这是密集数据吗?您是否事先知道列数?如果行数/列数> 26会发生什么? - zero323
1个回答

0

在编程中,你需要注意措辞。当你要求一个矩阵时,你是否指的是像 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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接