cas Исключение: scala .collection.mutable.WrappedArray $ ofRef нельзя привести к [D - PullRequest
0 голосов
/ 24 января 2020

выдает ClassCastExpection при применении классификатора knn

val df = training.map{ r =>
   (Vectors.dense(r.getAs[Array[Double]]("features")),r.getAs[Int]("id"))
  }.toDF("features","id")

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

scala.collection.mutable.WrappedArray$ofRef cannot be cast to [D

Я пытаюсь использовать Seq, WrappedArray, но не работает.

1 Ответ

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

Я собираюсь принять следующую схему для training:

id:Integer
features: Array[Double]

Попробуйте: val df = training.map(r => (Vectors.dense(r.getAs[Seq[Double]]("features").toArray),r.getAs[Integer]("id"))).toDF("features","id")

Наборы данных для внутреннего хранения Array объекты WrappedArray, быстрый Вступление которого можно найти здесь.

Массив против обернутого массива

Итак, вы должны "извлечь" ваш array из doubles, приведя его к Seq[Double] вместо Array[Double]. Однако для метода dense необходимо Array[Double]. Итак, преобразуйте Seq[Double] в Array[Double], используя метод toArray.

val training = List((Seq(0.0,0.0),2),(Seq(1.0,1.0),5)).toDF("features","id")
training.show
+----------+---+
|  features| id|
+----------+---+
|[0.0, 0.0]|  2|
|[1.0, 1.0]|  5|
+----------+---+
training: org.apache.spark.sql.DataFrame = [features: array<double>, id: int]


val df = training.map(r => (Vectors.dense(r.getAs[Seq[Double]]("training").toArray),r.getAs[Integer]("id"))).toDF("features","id")
df.show

+---------+---+
| features| id|
+---------+---+
|[0.0,0.0]|  2|
|[1.0,1.0]|  5|
+---------+---+
df: org.apache.spark.sql.DataFrame = [features: vector, id: int]

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...