簡體   English   中英

org.apache.spark.ml.linalg.DenseVector 不能轉換為 java.lang.Double

[英]org.apache.spark.ml.linalg.DenseVector cannot be cast to java.lang.Double

有人可以幫我嗎我正在嘗試將向量的列值轉換為 Double 並收到以下錯誤: org.apache.spark.ml.linalg.DenseVector cannot be cast to 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 時,我收到了這個類型轉換錯誤。

您正在嘗試從一行訪問向量,修改- From

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

To

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM