Spark KNN实现

该博客介绍了如何在Spark上实现KNN(K-最近邻)算法。通过创建Spark上下文,计算两个数据集的笛卡尔积,计算距离,并对每个元素进行分组,找出最接近的K个邻居,最后根据多数原则进行分类。
摘要由CSDN通过智能技术生成

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;

                             

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值