Я пытаюсь сделать СДР из k-ближайших соседей из точек внутри каждой Ограничительной рамки.У меня есть эти классы внутри объекта KNN:
object KNN extends App{
def buildtree(points: Seq[Seq[T]], depth: Int = 0): Option[KdNode[T]]
case class BoundingBox[T](lowerleft_X: T, lowerleft_Y: T, upperright_X: T, upperright_Y: T)
case class KdNode[T](value: Seq[T], left: Option[KdNode[T]], right: Option[KdNode[T]], axis: Int)
{
def Knearest(to: Seq[T]): Seq[Nearest[T]] = {....}
}
case class Nearest[T](value: Seq[T], to: Seq[T], distance: Double)
}
Сначала я создал RDD-пару из kdtree с ключом = BoundingBox и Value = Option [KdNode [T]], используя приведенную ниже строку кода.Здесь buildtree - это функция, определенная внутри объекта, а PointsRDD также является PairRDD.Это прекрасно работает:
val kdtree = PointsRDD.mapValues(p => buildtree(p))
Тип kdtree: RDD [BoundingBox [T], Option [KdNode [T]].
Затем, когда я пытаюсь вызвать функцию Knearest на kdtree, символ Knearest не распознается.
Я пытаюсь вызвать Knearest с помощью mapValues, а также пробовал его в цикле for, но оба подхода не работают, то есть он выдает ошибку «невозможно разрешить символ Knearest»(ошибка для обоих; для loop и mapValues)
val knn = kdtree.mapValues(node => Knearest(node))
for (kd <- kdtree; knearest = kd Knearest to)
где, to - точка, из которой нужно искать k-ближайших соседей.
Я делаю что-то не так, ноЯ не могу понять, что, так как я довольно новичок в Scala.Пожалуйста, помогите в этом отношении.Спасибо.