2017-05-15 21 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

相关问题