org.apache.spark.ml.linalg.densevector不能转换为java.lang.double

rvpgvaaj  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(350)

有人能帮我一下吗?我正在尝试将vector的列值转换为double,并得到以下错误:org.apache.spark.ml.linalg.densevector不能转换为java.lang.double
我基本上规范化了(0,1)范围内的值,对于这个范围,我必须将双精度类型的简单值转换为稠密向量。
下面是代码

val dataset =vectorUList.toDF("id")

        val assembler = new VectorAssembler()
          .setInputCols(Array("id"))
          .setOutputCol("features")

        val output = assembler.transform(dataset)
        println("Assembled columns ")
        output.select("id").show(false)
        output.printSchema()

        val scaler = new MinMaxScaler()
          .setInputCol("features")
          .setOutputCol("vScaled")
          .setMax(1)
          .setMin(0)
        val ScalarModel =scaler.fit(output)
        val scalarData =ScalarModel.transform(output)

        scalarData.select("vScaled").show()

        val ScaledCol: List[Row] = scalarData.select("vScaled").collect.toList
        var listofScaledCol: List[Double] = ScaledCol.map(r => r.getDouble(0))
        print(listofScaledCol)

现在将值转换回double,我得到了类型转换的错误。

bf1o4zei

bf1o4zei1#

您试图从一行访问向量,请修改- Fromvar listofScaledCol: List[Double] = ScaledCol.map(r => r.getDouble(0))To ```
var listofScaledCol: List[Double] = ScaledCol.map(_.getAsVector(0))

相关问题