Невозможно получить доступ к функции внутри класса case - scala - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь сделать СДР из 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.Пожалуйста, помогите в этом отношении.Спасибо.

...