2017-05-15 53 views
0

例如:在spark中,如果我想連接兩對,並且對值爲DenseMatrix,我該怎麼辦?

Input: RDD[arraySeq((arraySeq(1),DenseMatrix(2,3)), (arraySeq(2),DenseMatrix(5,7)), (arraySeq(4),DenseMatrix(7,8)), ((arraySeq(1),DenseMatrix(10,23)))] 
Output: RDD[(double(1), Vector(2,3,10,23)), (double(2), Vector(5,7)), (double(4), Vector(7,8))] 

我已經搜索「combineByKey,reduceByKey」,他們似乎能夠在這個問題上的工作,但我不知道怎麼寫的代碼。

此外,如果輸入的是:

arraySeq((arraySeq(1),DenseMatrix(2,3)), (arraySeq(2),DenseMatrix(5,7)), (arraySeq(4),DenseMatrix(7,8)), ((arraySeq(1),DenseMatrix(10,23)))

這意味着輸入不是RDD,如果我想要得到的輸出中我應該怎麼辦:

(double(1), DenseVector(2,3,10,23)), (double(2), DenseVector(5,7)), (double(4), DenseVector(7,8)),和輸出也不是RDD。

+0

請讓我知道,如果你正在尋找比答案我張貼一些其他的答案。 –

+0

嗨,非常抱歉我的不清楚的類型定義,我改變了我的問題,輸入和輸出的類型是規定的,所以也許你的答案不適合,你能幫我解決新的問題嗎? – miaoiao

+0

沒問題,我現在正在處理您的問題,一旦找到解決方案,我會盡快回復您。 –

回答

0

試試這個。

val pairs = List((1,Seq(2,3)), (2,Seq(5,7)), (4,Seq(7,8)), ((1,Seq(10,23)))) 
val pairsRdd = sc.parallelize(pairs) 
pairsRdd.reduceByKey((a,b)=>a++b).collect 

輸出:

res0: Array[(Int, Seq[Int])] = Array((1,List(2, 3, 10, 23)), (2,List(5, 7)), (4,List(7, 8))) 
+0

也許OP在尋找元組而不是seq。類型是這樣的:'Array [(Int,(Int,Int,Int,Int,Int))]' – marios

+0

對不起我的不清楚的類型定義,我改變了輸入和輸出元組類型 – miaoiao

相關問題