org. apache .spark.ml.linalg.DenseVector нельзя преобразовать в java .lang.Double - PullRequest
0 голосов
/ 20 июня 2020

Может кто-нибудь помочь мне, я пытаюсь преобразовать значения столбцов вектора в Double и получаю следующую ошибку: org. apache .spark.ml.linalg.DenseVector не может быть преобразован в java .lang .Double

Я в основном нормализовал свои значения между диапазоном (0,1) и для этого диапазона мне пришлось преобразовать мои простые значения типа double в плотный вектор.

Ниже приводится код

        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 я получаю эту ошибку преобразования типа.

1 Ответ

0 голосов
/ 20 июня 2020

Вы пытаетесь получить доступ к вектору из строки, измените - From

var listofScaledCol: List[Double] = ScaledCol.map(r => r.getDouble(0))

To

var listofScaledCol: List[Double] = ScaledCol.map(_.getAs[Vector]("vScaled")(0))
...