Scala 在spark中,如果我想连接两对,并且对值是DenseMatrix,我应该怎么做?
例如:Scala 在spark中,如果我想连接两对,并且对值是DenseMatrix,我应该怎么做?,scala,apache-spark,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))
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,如果我想获得输出,应该怎么做:
(双(1),DenseVector(2,3,10,23)),(双(2),DenseVector(5,7)),(双(4),DenseVector(7,8))
,输出也不是RDD。试试这个
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)))
请让我知道,如果你正在寻找我发布的答案以外的其他答案。嗨,很抱歉我的类型定义不清楚,我已经更改了我的问题,输入和输出的类型是规定的,所以可能你的答案不太合适,你能帮我回答新的问题吗?没问题,我正在解决你的问题,我会回到你身边一旦我找到了解决方案。可能OP是在寻找元组而不是序列。类型如下:
Array[(Int,(Int,Int,Int,Int,Int))]
很抱歉我的类型定义不清楚,我已经更改了输入和输出元组类型