我正在尝试从每个边界框内的点对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还是很陌生。请帮助这方面。谢谢。