spark实验(二)--scala实验(3)
实验1,计算级数:

首先打开安装完scala ide的eclipse,在eclipse 中新建一个scala project。

然后新建一个scala的object对象

导入scala.io.StdIn包,用以实现接受键盘输入
在新建的object对象中,新建main函数,并添加以下代码实现:
package sn
import scala.io.StdIn object test {
def main(args: Array[String]): Unit = {
println("请输入Sn的n值用以计算Sn=2/1+3/2+4/3+...+(n+1)/n来计算Sn的值");
var q:Int=StdIn.readInt();
var i:Int=0;
var sum:Float=0.0f;
for(i <- 1 to q)
{
var id:Float =i;
sum+=(id+1)/id;
}
println("当n="+q+"时,Sn的值为"+sum);
}
}
运行结果:

实验2,模拟图形绘制

case class Point(var x:Double,var y:Double) extends Drawable{
def shift(deltaX:Double,deltaY:Double){
x+=deltaX;
y+=deltaY
}
}
trait Drawable{
def draw()
{
println(this.toString)
}
}
// 请完成 Shape 类、Line 类和 Circle 类的定义。
object MyDraw{
def main(args: Array[String]) {
val p=new Point(10,30)
p.draw;
val line1 = new Line(Point(0,0),Point(20,20))
line1.draw
line1.moveTo(Point(5,5))
//移动到一个新的点
line1.draw
line1.zoom(2)
//放大两倍
line1.draw
val cir= new Circle(Point(10,10),5)
cir.draw
cir.moveTo(Point(30,20))
cir.draw
cir.zoom(0.5)
cir.draw
}
}
其Shape,Line和Circle的定义如下:
abstract class Shape(var startPoint:Point) extends Drawable
{
def moveTo(newPoint:Point)
{
startPoint =newPoint;
}
def zoom(num:Double);
}
class Line(x1:Point,var x2:Point) extends Shape(x1)
{
override def zoom(num:Double)
{
val midPoint=Point((x2.x+startPoint.x)/2,(x2.y+startPoint.y)/2)
startPoint.x=midPoint.x+num*(startPoint.x-midPoint.x)
startPoint.y=midPoint.y+num*(startPoint.y-midPoint.y)
x2.x=midPoint.x+num*(x2.x-midPoint.x)
x2.y=midPoint.y+num*(x2.y-midPoint.y)
}
override def moveTo(newPoint:Point)
{
var x=(newPoint.x-startPoint.x);
var y=(newPoint.y-startPoint.y);
startPoint=newPoint;
x2.shift(x, y)
}
override def draw()
{
println(s"Line:(${startPoint.x},${startPoint.y})--(${x2.x},${x2.y})")
} } class Circle(center:Point,var radius:Double) extends Shape(center)
{
override def draw()
{
println(s"Circle center:(${startPoint.x},${startPoint.y}),R=$radius")
}
override def zoom(num:Double)
{
radius*=num;
}
}
运行截图:

实验3, 统计学生成绩

object Count {
def main(args: Array[String]): Unit = {
// 假设数据文件在当前目录下
val inputFile = scala.io.Source.fromFile("test.txt")
//”\\s+“是字符串正则表达式,将每行按空白字符(包括空格/制表符)分开
// 由于可能涉及多次遍历,同 toList 将 Iterator 装为 List
// originalData 的类型为 List[Array[String]]
val originalData =inputFile.getLines.map{_.split("\\s+")} .toList
val courseNames = originalData.head.drop(2) //获取第一行中的课程名
val allStudents = originalData.tail // 去除第一行剩下的数据
val courseNum = courseNames.length
// 统计函数,参数为需要常用统计的行
//用到了外部变量 courseNum,属于闭包函数
def statistc(lines:List[Array[String]])= {
// for 推导式,对每门课程生成一个三元组,分别表示总分,最低分和最高分
(for(i<- 2 to courseNum+1) yield {
// 取出需要统计的列
val temp = lines map {elem=>elem(i).toDouble}
(temp.sum,temp.min,temp.max)
}) map {case (total,min,max) => (total/lines.length,min,max)
} // 最后一个 map 对 for 的结果进行修改,将总分转为平均分
}
// 输出结果函数
def printResult(theresult:Seq[(Double,Double,Double)]){
// 遍历前调用 zip 方法将课程名容器和结果容器合并,合并结果为二元组容器
(courseNames zip theresult) foreach {
case (course,result)=>
println(f"${course+":"}%-10s${result._1}%5.2f${result._2}%8.2f${r
esult._3}%8.2f")
} }
// 分别调用两个函数统计全体学生并输出结果
val allResult = statistc(allStudents)
println("course average min max")
printResult(allResult)
//按性别划分为两个容器
val (maleLines,femaleLines) = allStudents partition
{_(1)=="male"}
// 分别调用两个函数统计男学生并输出结果
val maleResult = statistc(maleLines)
println("course average min max")
printResult(maleResult)
// 分别调用两个函数统计男学生并输出结果
val femaleResult = statistc(femaleLines)
println("course average min max")
printResult(femaleResult)
}
}
spark实验(二)--scala实验(3)的更多相关文章
- spark实验(二)--scala安装(1)
一.实验目的 (1)掌握在 Linux 虚拟机中安装 Hadoop 和 Spark 的方法: (2)熟悉 HDFS 的基本使用方法: (3)掌握使用 Spark 访问本地文件和 HDFS 文件的方法. ...
- 云计算实验二 Docker实验-docker安装
一.实验目的 1.了解Docker服务安装: 2.掌握Docker镜像操作 二.实验内容 1.Docker服务安装 查看内核版本 uname -r 安装依赖环境: yum install -y yu ...
- 在Spark上用Scala实验梯度下降算法
首先参考的是这篇文章:http://blog.csdn.net/sadfasdgaaaasdfa/article/details/45970185 但是其中的函数太老了.所以要改.另外出发点是我自己的 ...
- 云计算实验二 Docker实验-mysql、tomcat、sqlserver、redis、oracle、mongo安装
mysql安装 下载镜像 docker pull mysql 查看镜像 docker images|grep mysql 创建启动容器 docker run --name mysqlserver -v ...
- FPGA与simulink联合实时环路系列——实验二LED
实验二LED 实验内容 在实验一的基础上,将simulink产生的测试信号输出到FPGA开发板上的LED灯进行显示,这里要在生成的硬件模型上进行修改,将传送到FPGA的信号输出到8个LED灯上,并且对 ...
- 20145301&20145321&20145335实验二
20145301&20145321&20145335实验二 这次实验我的组员为:20145301赵嘉鑫.20145321曾子誉.20145335郝昊 实验内容详见:实验二
- 20175325 《JAVA程序设计》实验二《JAVA开发环境的熟悉》实验报告
20175325 <JAVA程序设计>实验二<JAVA开发环境的熟悉>实验报告 一.实验报告封面 课程:Java程序设计 班级:1753班 姓名:石淦铭 学号:20175325 ...
- 2017-2018-2 20165313实验二《Java面向对象程序设计》
实验报告封面 实验内容及步骤 实验一 1.试验要求: 参考 (http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST) 完成单元测试的学习. ...
- 20172304 实验二 《Java面向对象程序设计》 实验报告
20172304 实验二 <Java面向对象程序设计> 实验报告 课程名称:<程序设计与数据结构> 学生班级:1723班 学生姓名:段志轩 学生学号:20172304 实验时间 ...
随机推荐
- Java中boolean类型到底占用多少字节(转载)
来源:https://www.cnblogs.com/brucecloud/p/5509921.html 虽然 Java 虚拟机定义了 boolean 这种数据类型,但是只对它提供了非常有限的支持.在 ...
- js获取当前时间:yyyy-MM-dd HH:MM:SS
var nowDate = new Date();var year = nowDate.getFullYear(); < ? ; ? " + nowDate.getDate() : n ...
- 16 符号 xargs
03. 系统特殊符号: 1) 基础符号系列 美元符号:$ 叹号符号: ! 取反 竖线符号: | 管道符号 前一个命令执行结果交给后面命令处理 xargs 命令|xargs 命令 xargs: 将信息进 ...
- mysql分组,然后组内排序取最新的一条
参照: https://blog.csdn.net/qq_16504067/article/details/78589232 https://www.cnblogs.com/w1441639547/p ...
- 微信小程序 获取cookie 以及设置 cookie
小程序开发中我们需要获取到后端给的cookie进行请求验证,但是微信并没有帮我们保存cookie,那么我们要维持会话需要自己来保存cookie,并且请求的时候加上cookie 1.获取cookie 在 ...
- Jarvis OJ - 爬楼梯 -Writeup
Jarvis OJ - 爬楼梯 -Writeup 本来是想逆一下算法的,后来在学长的指导下发现可以直接修改关键函数,这个题做完有种四两拨千斤的感觉,记录在这里 转载请标明出处:http://www.c ...
- 【SIKI学院】愤怒的小鸟创建过程-2
第二讲:Spring joint组建介绍 点重小鸟右侧add component输入spring joint,选择spring joint 2D(弹簧关节).给右侧树枝加刚体选择physics 2D- ...
- 利用ansible-playbook一键部署ELK(ElasticSearch,logstash and kibana)
一.部署前环境介绍: es集群5台(es01,es02,es03,es04,es05),logstash服务器1台(logstash2),kibana服务器1台(kibana2),模拟apache服务 ...
- 【原】shell增加定时任务
通过shell脚本增加定时任务:#CRON_FILE="/var/spool/cron/root" (centos系统) CRON_FILE="/var/spool/cr ...
- C语言程序的错误和警告
一段C语言代码,在编译.链接和运行的各个阶段都可能会出现问题.编译器只能检查编译和链接阶段出现的问题,而可执行程序已经脱离了编译器,运行阶段出现问题编译器是无能为力的. 如果我们编写的代码正确,运行时 ...