无法访问案例类内部的函数-scala

时间:2019-02-25 07:55:17

标签: scala function rdd case-class

我正在尝试从每个边界框内的点对k个最近的邻居进行RDD。我在对象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)
}

首先,通过使用下面的代码行,我对kdtree进行了对RDD的设置,其中key = BoundingBox和Value = Option [KdNode [T]]。在这里,buildtree是在对象内部定义的函数,而PointsRDD也是PairRDD。效果很好:

val kdtree = PointsRDD.mapValues(p => buildtree(p))

kdtree的类型为RDD [BoundingBox [T],Option [KdNode [T]]。

然后,当我尝试在kdtree上调用Knearest函数时,无法识别Knearest符号。

我正在尝试使用mapValues调用Knearest,并在for循环中尝试了该方法,但是两种方法均不起作用,即出现错误“无法解析符号Knearest”(这两种错误; for循环和mapValues) / p>

val knn = kdtree.mapValues(node => Knearest(node))
for (kd <- kdtree; knearest = kd Knearest to)

其中,to是要搜索k个最近邻居的点。

我在这里做错了什么,但是我无法弄清楚是什么,因为我对Scala还是很陌生。请帮助这方面。谢谢。

0 个答案:

没有答案