以下实验源码均使用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中的参数Kval 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)(arr.slice(1,arr.length),arr(0))}//计算到数组中所有点到某个点的距离,并返回(Array[Int], Int, Double)元组def Calculate_Distance(t : (Array[Int], Int), p : Array[Int]) = {val arr = t._1var dist: Int = 0for(i <- arr.indices){val diff = arr(i) - p(i)dist += diff * diff}(arr,t._2,math.sqrt(dist))}//计算数组平均值def Calculate_Average(arr: Array[Double]) = {var sum: Double = 0arr.foreach(x => sum += x)sum/arr.length}//计算数组方差def Calculate_Variance(arr: Array[Double]) = {val avg = Calculate_Average(arr)var variance: Double = 0arr.foreach(x => {val diff = x - avg; variance += diff * diff})variance/arr.length}//步骤3:进行KNN算法//进行字符串处理val ret = array.map(String_Split)//对数组每个元素依次计算到pivot的距离.map(t => Calculate_Distance(t,pivot))//按照距离为第一优先级,id为第二优先级排序.sortWith((a,b) => if(a._3 == b._3) {a._2 < b._2} else {a._3 < b._3})//最后选取前K个元素.slice(0,parameter_K)//步骤4:提取ret的ID和距离,赋值给ids和distances数组val ids = ret.map(t => t._2)val distances = ret.map(t => t._3)//步骤5:输出数据ids.foreach(x => {print(x);print(" ")})println()println("%.4f".format(Calculate_Average(distances)))println("%.4f".format(Calculate_Variance(distances)))//步骤6:停止运行sc.stop()}
}

输出结果:

560 223 554 438 324 474 274 574 294 397 291 75 440 596 684 423 658 752 118 914
38.8574
34.3549

大作业二:基于Spark的K-mer计数

问题描述:

K-mer是一个长度为K ( K > 0 )的子串,K-mer计数是指整个序列中K-mer出现的频度,本题需要返回出现次数排在前N的子串和出现频率。
假如输入的字符串为ABCDA,K=2,那么子串包含 AB, BC, CD, DA
参数:
K = 2(子串长度)
N = 10(返回排在前N的子串和频率)
输入格式: KM-input.txt
S(长度任意的字符串)
输出结果:

  • 问题1:共N组输出,每组输出为字符串和出现频率,按照出现次数降序排序,若出现次数相同,按照字符串的字典序降序排序。
  • 问题2:输出一个浮点数,为所有字符串出现次数的平均值

题解:

import org.apache.spark.{SparkConf, SparkContext}
import scala.collection.mutable._object Kmer {val parameter_K: Int = 2 //子串长度val parameter_N: Int = 10 //返回排在前N的子串和频率def main(args: Array[String]): Unit = {//步骤1:启动spark并读入数据val sparConf = new SparkConf().setMaster("local").setAppName("Kmer")val sc = new SparkContext(sparConf)val lines = sc.textFile("file\\KM-input.txt")val array = lines.collect()//步骤2:定义枚举子串函数def Find_SubStrings(str : String, k : Int) = {val ret : ListBuffer[String] = ListBuffer()for(i <- 0 until str.length - k + 1){val substr = str.substring(i,i+k)ret += substr}ret.toList}//步骤3:定义字串排名函数def String_Count(str : String) = {Find_SubStrings(str,parameter_K).groupBy(str => str).map(t_ => (t_._1, t_._2.length)).toList.sortWith((a,b) => if(a._2 == b._2) {a._1 > b._1} else {a._2 > b._2})}//步骤4:定义输出与统计函数def Show_Infomation(l : List[(String, Int)], n : Int) = {l.slice(0,n).foreach(x_ => println(x_._1 + "," + x_._2))var avg: Double = 0l.foreach(x_ => avg += x_._2)val ret = avg/l.lengthprintln("%.4f".format(ret))}//步骤5:对array的每一行字符串均进行以上操作,并输出结果array.foreach(str => Show_Infomation(String_Count(str),parameter_N))//停止运行sc.stop()}
}

输出结果:

NM,16
XH,15
PN,15
IX,15
QX,14
FK,14
DL,14
XK,13
SK,13
RZ,13
7.3950

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

  1. 操作系统大作业 基于Linux的模拟进程调度算法 运用c++语言编程 在VMware虚拟机里 centos 亲自写亲自测试 代码 说明书

    发布文章 博文管理我的博客退出 Trash Temp 操作系统大作业 基于Linux的模拟进程调度算法 运用c++语言编程 在VMware虚拟机里 centos 亲自写亲自测试 代码 说明书 @[TO ...

  2. matlab求解多自由度振动系统,【2017年整理】1-《机械振动基础》大作业,基于matlab的多自由度振动.doc...

    [2017年整理]1-<机械振动基础>大作业,基于matlab的多自由度振动 <机械振动基础>大作业 (2016年春季学期) 题目多自由度振动系统的固有频率和固有阵型 姓 名学 ...

  3. 江南大学C语言大作业,TCPIP大作业基于TCP的网络通信编程C语言版(江南大学).doc...

    TCPIP大作业基于TCP的网络通信编程C语言版(江南大学).doc TCP/IP协议编程大作业 课题名称 基于TCP的网络通信 专 业 计算机科学与技术 班 级 计算机1206 学 号 103041 ...

  4. 嵌入式系统大作业——基于QT的3D模型展示

    嵌入式系统大作业--基于QT的3D模型展示 写在前面 实验设备 实现内容 实现过程 在win10上利用SolidWorks软件对模型进行预处理: 编写代码实现功能: 效果演示 参考资料 写在前面 该大 ...

  5. 【数字图像处理】大作业 基于模式匹配的车牌识别

    大作业 基于模式匹配的车牌识别 1 课程设计任务 2 设计框图 3 准备工作 4 任务流程 4.1 图像预处理 4.2 图像分割 4.2.1 车牌定位 (1) 上下定界--水平扫描 (2) 左右定界- ...

  6. 数字信号处理大作业——基于matlab R2019a的男声变女声资料汇总与代码

    @数字信号处理大作业--基于matlab R2019a的男声变女声资料汇总与代码 概述 参考了很多前人的资料,发现很多函数已经过时了,而且从我通过VIP下载的代码来看,代码的逻辑不是很清晰,废话也多, ...

  7. 数字图像处理——大作业 基于车道信息的违法车辆车牌识别

    数字图像处理--大作业 基于车道信息的违法车辆车牌识别 一.车牌识别研究现状与分析 二.车牌识别算法原理 2.1 车牌定位 2.1.1 基于RGB阈值的车牌区域初定位 2.1.2 基于数学形态学的车牌 ...

  8. HTML期末大作业~基于HTML+CSS+JavaScript旅游网站设计与实现(6个页面)

    HTML期末大作业~HTML+CSS+JavaScript旅游网站设计与实现->绿色古典的旅游度假景区(6个页面) 临近期末, 你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTML ...

  9. 用matlab实现女声变男声步骤,数字信号处理大作业——基于matlab R2019a的男声变女声资料汇总与代码...

    @数字信号处理大作业--基于matlab R2019a的男声变女声资料汇总与代码 概述 参考了很多前人的资料,发现很多函数已经过时了,而且从我通过VIP下载的代码来看,代码的逻辑不是很清晰,废话也多, ...

  10. HTML期末大作业~基于HTML+CSS+JavaScript 牛排美食餐饮网站设计与实现(6个页面)

    HTML期末大作业~基于HTML+CSS+JavaScript 牛排美食餐饮网站设计与实现 临近期末, 你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTML网页作业无从下手?网页要求的总 ...

最新文章

  1. Android 机型适配之gradient默认渐变方向
  2. python基础包括什么-python中f是什么
  3. async-validator 表单验证两种数据的解决方案
  4. 启动子级时出错_WHO I级脑膜瘤手术或放射外科治疗后的恶性转变
  5. html如何在本页路径上拼接参数,Html图片路径拼接参数实现打印导出
  6. 有些事,领导不直接找你,让同事联系你,这是什么套路?
  7. js关于子元素不触发父元素事件的若干方法
  8. Catalent康泰伦特上海外高桥临床供应中心扩建温控产能;富士胶片发布2021财年第三季度财报 | 医药健闻...
  9. 计算机网络通信同步异步效率,同步传输和异步传输的区别及优缺点
  10. 误操作导致系统进不去得重装,C盘资料没备份?!别慌,还有救!-200820
  11. 高数_第5章常微分方程_二阶微分方程
  12. PDF编辑_隐私条款
  13. VisualFreeBasic:VisualBasic6望尘莫及之短路逻辑
  14. Python爬虫采集抓取:Python3.x+Fiddler 采集抓取 APP 数据
  15. ISO27002新版标准变化解读
  16. 语法格式描述规范BNF、EBNF、ABNF
  17. 代码管理(git)及代码规范
  18. php 去重数组,php 数组 去重
  19. 滴滴出行2017校园春招内推面试(一)
  20. 上位机编程工控控件全览,漂亮工控控件

热门文章

  1. vue实现刷新页面,页面回到顶部
  2. Typora基本技巧
  3. Silverlig1.Silverlight读取外部XML加载配置-(使用WebClient读取XAP包同目录下的XML文件)...
  4. 【vscode简单入门(四)】vscode精美UI主题推荐 (~」还你一个花里胡哨的vscode「~)
  5. Apache Ranger:统一授权管理框架
  6. 学计算机发朋友圈文案,2020开学发朋友圈文案句子精选100句
  7. day-9 字符串笔记
  8. 在VT上搜索恶意软件
  9. 经典分子动力学势能模型拟合程序atomicrex介绍
  10. Sue的小球 [费用提前计算]