我试图在Spark中实现K最近邻算法.我想知道是否可以使用嵌套的RDD.这将使我的生活更轻松.请考虑以下代码段.
public static void main (String[] args){
//blah blah code
JavaRDD<Double> temp1 = testData.map(
new Function<Vector,Double>(){
public Double call(final Vector z) throws Exception{
JavaRDD<Double> temp2 = trainData.map(
new Function<Vector, Double>() {
public Double call(Vector vector) throws Exception {
return (double) vector.length();
}
}
);
return (double)z.length();
}
}
);
}
目前我收到这个嵌套设置的错误(我可以在这里发布完整的日志).是否允许在拳头位置?谢谢
解决方法:
不,这是不可能的,因为RDD的项目必须是可序列化的,并且RDD不可序列化.这是有道理的,否则你可能会通过网络传输一个完整的RDD,如果它包含大量数据,这是一个问题.如果它不包含大量数据,您可能应该使用数组或类似的数据.
但是,我不知道你是如何实现K最近邻居的……但是要小心:如果你做的事情就像计算每一对点之间的距离那样,实际上这在数据集大小上是不可扩展的,因为它是O (N2).