2015-12-08 101 views
2

我有一個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轉換爲矩陣。

+0

這個心不是旨在成爲一個完整的答案,而是讓你開始一些幫助,但我相信這可以使用map()函數 –

+0

你能提供更多的細節嗎?它是密集的數據嗎?你事先知道列數嗎?如果行數/列數> 26,會發生什麼情況? – zero323

回答

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]