Исключение: «поле» метка »не существует Spark - PullRequest
0 голосов
/ 24 января 2020

Я хочу применить алгоритм KNN. У меня есть два столбца: id и features

> KNN.printSchema
root
|-- id: int (nullable = true)
|-- features: double (nullable = true)

Разделить мои данные на обучение и тестирование

  val training = spark.read.parquet("/usr/local/spark/dataset/data/user")
  val df = training.map(r => (Vectors.dense(r.getAs[Seq[Double]]("features").toArray),r.getAs[Integer]("id"))).toDF("features","id")
  val assembler = new VectorAssembler().setInputCols(Array("id","features")).setOutputCol("feature")
  val data = assembler.transform(df)
  val splits = df.randomSplit(Array(0.8, 0.2), seed = 1234L) 
  val (trainingData, testData) = (splits(0), splits(1))

И модель здания

 val knnModel = knn.fit(trainingData)
 val predicted = knnModel.transform(testData)
 predicted.show()

Но которая вызывает эту ошибку:

java .lang.IllegalArgumentException: поле "label" не существует.

Любая помощь будет оценена.

1 Ответ

2 голосов
/ 27 января 2020

Вы можете взять в качестве ссылки пример реализации, доступный в примерах dir. Я предполагаю, что вы используете реализацию knn: https://github.com/saurfang/spark-knn.

Как я уже сказал в моем комментарии, вы должны создать набор данных со столбцом меток, чтобы начать оптимизацию knn:

 val rawDataset = MLUtils.loadLibSVMFile(sc, "data/mnist/mnist.bz2")
  .toDF()

Это считывает файл и создает фрейм данных с помеченными обучающими образцами. Попробуйте это и распакуйте сгенерированную схему, вы увидите столбец метки. В вашей схеме нет ни одной, только столбец функций. Поскольку этот алгоритм, в отличие от K-средних, является контролируемым алгоритмом, вы должны предоставить столбец меток для каждого ряда данных .

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