R:查询数据集
S:训练数据集
需要对R中每一个元素计算与S中每一个元素的距离
可以首先计算得到两个数据集的笛卡尔积
用map找到distance
groupBykey同一个r的distance 找出其中的KNN
public class KNN{
public static void main(String[] args) throws Exception{
//处理输入参数
//创建spark上下文对象
JavaSparkContext ctx = createJavaSparkContext("knn");
//广播共享对象 将k和d作为共享对象,在所有节点均能访问
final Broadcast<Integr> broadcastK= ctx.broadcast(k);
final Broadcast<Integer> broadcastD=ctx.broadcast(d);.
//建立RDD
JavaRDD<String> R= ctx.textfile("",1);
JavaRDD<String> S= ctx.textfile("",1);.
//计算笛卡尔积
JavaPairRDD<String,String> cart = R.cartesian(s);
//计算distance 输出是(r,(distance,classification))
JavaPairRDD<String,Tuple2<Integer,String>> knnmapped =cart.mapToPair(
new PairFunction<Tuple2<String,String>,String,Tupple<Integer,String>>(){
public Tuple2<String,Tuple2<Integer,String>>call(Tuple2<String,String> cartrecord){
String rrecord=cartrecord._1;
String srecord=cartrecord._2;