【发布时间】:2018-07-13 14:01:06
【问题描述】:
我有以下函数,它采用 Likes 类型的数组 (type Likes=Int)
以及 Likes (likesVector) 类型数量的 RDD。对于 likesVector RDD 中的每个数字,它计算与均值数组中每个均值的距离,并选择距离最小的均值 (val distance = (mean-number).abs)。虽然我期待Map[Likes,Array[Likes]] 类型的结果,但我得到一个空地图。 Map[Likes,Array[Likes]] 代表(mean->Array of number-nearest numbers)。
实现这一目标的最佳方法是什么?我怀疑这与 Scala 集合的可变性有很大关系。
def assignDataPoints(means:Array[Likes],likesVector:RDD[Likes]): Map[Likes,Array[Likes]] ={
var likes_Mean = IntMap(1->1)
var likes_mean_final = mutable.Map.empty[Likes,Array[Likes]]
likesVector.map(dataPoint => {
means.foldLeft(Array.empty[Likes])( (accumulator, mean)=> {
val dist= computeDistance(dataPoint,mean)
val nearestMean = if (dist < accumulator(0)) {
accumulator(0)=dist
accumulator(0)
} else{
accumulator(0)
}
val b= IntMap(nearestMean.toInt -> dataPoint)
println("b:"+ b)
likes_mean_final ++ likes_Mean.intersectionWith(b,(_, av, bv: Likes) => Array(av, bv))
accumulator
})})
likes_mean_final.toMap
}
【问题讨论】:
-
我不了解您的操作背景。你能用一些输入和输出更新你的问题吗