在spark中,如果我想连接两对,并且该对值是DenseMatrix,我该怎么办?

时间:2017-05-15 01:47:08

标签: scala apache-spark

例如:

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))]

我搜索了#34; 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。

1 个答案:

答案 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)))