Scala 如何合并RDD元组
我想用reduceByKey合并同一个键的多个元组, 代码如下:Scala 如何合并RDD元组,scala,apache-spark,Scala,Apache Spark,我想用reduceByKey合并同一个键的多个元组, 代码如下: val data = Array(DenseMatrix((2.0,1.0,5.0),(4.0,3.0,6.0)), DenseMatrix((7.0,8.0,9.0),(10.0,12.0,11.0))) val init = sc.parallelize(data,2) //getColumn def getColumn(v:DenseMatrix[Double]) : Map[Int, IndexedSeq[(Int
val data = Array(DenseMatrix((2.0,1.0,5.0),(4.0,3.0,6.0)),
DenseMatrix((7.0,8.0,9.0),(10.0,12.0,11.0)))
val init = sc.parallelize(data,2)
//getColumn
def getColumn(v:DenseMatrix[Double]) : Map[Int, IndexedSeq[(Int, Double)]]={
val r = Random
val index = 0 to v.size - 1
def func(x:Int, y:DenseMatrix[Double]):(Int,(Int, Double)) =
{
( x,( r.nextInt(10), y.valueAt(x)))
}
val rest = index.map{x=> func(x,v)}.groupBy(x=>x._1).mapValues(x=>x.map(_._2))
rest
}
val out= init.flatMap{ v=> getColumn(v) }
val reduceOutput = tmp.reduceByKey(_++_)
val out2 = out.map{case(k,v)=>k}.collect() // keys here are not I want
这里有两张图片,第一张是我认为应该是的[key,value]对,第二张显示的是真正的键,它们不是我想要的,所以输出不正确
我该怎么办
您希望得到什么样的结果?您不希望元组作为输出,因为您不知道它们的长度,因此编写代码来处理它们将非常困难。。你到底想要什么?
reduceByKey
看起来不错,元组被合并到一个向量中,但是通过val out2=out.map{case(k,v)=>k}.collect()
?请澄清?val out2=out.map{case(k,v)=>k}.collect()
是一个测试,我只想比较一下pic和pic2。因为我认为val out=init.flatMap{v=>getColumn(v)}
的键是(2,5,0,9,1,2,3,6,1,9,7,3)(检查pic1),但实际上键是pic2。好吧,我知道这个问题,因为“rest”
是IndexedSeq(Int,Double)
,而IndexedSeq不是一个可序列化类型,所以当我们将它与map、flatmap或reduceByKey一起使用时,它会导致操作系统竞速,所以我们最好使用“可序列化类型”@Ramesh Maharjan您到底想要什么结果?您不想要元组作为输出,因为您不知道它们会有多长,所以编写代码来处理它们是非常困难的。。你到底想要什么?reduceByKey
看起来不错,元组被合并到一个向量中,但是通过val out2=out.map{case(k,v)=>k}.collect()
?请澄清?val out2=out.map{case(k,v)=>k}.collect()
是一个测试,我只想比较一下pic和pic2。因为我认为val out=init.flatMap{v=>getColumn(v)}
的键是(2,5,0,9,1,2,3,6,1,9,7,3)(检查pic1),但实际上键是pic2。好吧,我知道这个问题,因为“rest”
是IndexedSeq(Int,Double)
,而IndexedSeq不是一个可序列化类型,所以当我们将它与map、flatmap或reduceByKey一起使用时,它会导致操作系统竞速,所以我们最好使用“可序列化类型”@Ramesh Maharjan