【BIT云计算大作业】基于Spark的K近邻(KNN)查询以及K-mer计数

以下实验源码均使用Scala语言编写。

作业中使用的输入文件可以通过以下网盘地址下载:

https://pan.baidu.com/s/1J8miFmJ6RVZKZqe2O5gAwg

提取码:ethn

输入文件放置在项目根目录下的file文件夹(也可以根据实际情况进行调整)。

大作业一:基于Spark的K近邻(KNN)查询

问题描述:

在空间中共有N个点,每个点由R维向量表示其坐标,对于一个点,KNN指距离其最近的K个点的集合,距离为欧几里得距离。
参数:
K = 20(返回近邻的个数)
R = 4(每个点的坐标维度)
要查询KNN的坐标 (0,0,0,0)
输入文件: KNN-input.txt
i,a,b,c,d (共1000行,每行开始一个整数i,表示点的id,之后4个整数,表示坐标,数据之间以”,”分割)
输出结果:

  • 问题1:输出K个整数,为查询的K近邻结果的id,按照距离升序排序(如果距离相等优先输出id靠前的)。
  • 问题2:输出1个浮点数,为K近邻距离的平均值
  • 问题3:输出1个浮点数,为K近邻距离的方差

题解:

import org.apache.spark.{
   SparkConf, SparkContext}

object KNN {
   
  val parameter_K: Int = 20 //KNN中的参数K
  val pivot: Array[Int] = Array(0,0,0,0) //要查询KNN的坐标

  def main(args: Array[String]): Unit = {
   
    //步骤1:启动spark并读入数据
    val sparConf = new SparkConf().setMaster("local").setAppName("KNN")
    val sc = new SparkContext(sparConf)
    val lines = sc.textFile("file\\KNN-input.txt")
    val array = lines.collect()

    //步骤2:定义相关函数
    //字符串处理,返回(Array[Int], Int)元组
    def String_Split(str : String) = {
   
      val arr = str.split(",").map(x_ => x_.toInt)
      (
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值