ошибка приведения: приведите ArrayType (DoubleType, true) к DoubleType - PullRequest
0 голосов
/ 23 января 2020

У меня есть файл паркета, который содержит идентификатор, функции. Когда я использую ошибку приведения enter image description here

приведение ArrayType (DoubleType, true) к DoubleType

val training = spark.read.parquet("/usr/local/spark/dataset/data/user")
 val df = training.selectExpr("cast(id as int) id","cast(features as double) features")
 val assembler = new VectorAssembler().setInputCols(Array("features" )).setOutputCol("feature")
 val data = assembler.transform(df)

эта ошибка появляется

cannot resolve 'CAST(`features` AS DOUBLE)' due to data type mismatch: cannot cast ArrayType(DoubleType,true) to DoubleType; line 1 pos 0;

как ее решить?

После ошибки редактирования появляются

java .lang.ClassCastException: scala .collection.mutable.WrappedArray $ ofRef не может быть приведен к [D

1 Ответ

0 голосов
/ 23 января 2020

Столбец «Features» содержит массив DoubleType, поэтому его нельзя преобразовать в DoubleType. Вы преобразуете этот столбец в вектор, используя Vectors.dense. Затем используйте VectorAssembler для столбцов, содержащих double и vector.

Что-то вроде,

val training = spark.read.parquet("/usr/local/spark/dataset/data/user")
 val df = training.map{ r =>
   (Vectors.dense(r.getAs[Array[Double]]("features")),r.getAs[Double]("id"))
  }.toDF("features","id")
 val assembler = new VectorAssembler().setInputCols(Array("features" )).setOutputCol("feature")
 val data = assembler.transform(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...