如何取RDD[Double,Double]的每个元素的第一个元素,并用它创建一个对角矩阵



我在Scala中使用Spark,我想转换

 Array[(Double, Double)] = Array((0.9398785848878621,1.0), (0.25788885483788343,1.0), (0.6093264774118677,1.0), (0.19736451516248585,0.0), (0.9952925254744414,1.0), (0.6920511147023924,0.0...

变成了

 Array[Double]=Array(0.9398785848878621, 0.25788885483788343, 0.6093264774118677, 0.19736451516248585, 0.9952925254744414 , 0.6920511147023924 ...

我该怎么做?那么我如何使用这个Array[Double]来创建一个对角矩阵?

取元组的第一部分:

val a = Array((0.9398785848878621,1.0), (0.25788885483788343,1.0))
val result = a.map(_._1)

试试这个:

    import org.apache.spark.mllib.linalg.distributed.{CoordinateMatrix, MatrixEntry}
    val a = Array((0.9398785848878621,1.0), (0.25788885483788343,1.0), ...)
    val res1 = a.map(_._1)
    val entries = New Array[Double](res1.length)
    for (i <- 0 to res1.length - 1){
        entries(i) = MatrixEntry(i,i,res1(i))
    }
    val mat = CoordinateMatrix(sc.parallelize(res1))

相关内容

最新更新