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 实验时间 ...
随机推荐
- 2.11 webdriver中使用 FileUtils ()
http://snkcxy.iteye.com/blog/1845862 ex: 比较网页截图图片与预期是否一致 File screenshot=((TakesScreenshot)driver ). ...
- goahead 流程
原文:https://blog.csdn.net/qq_32419007/article/details/80756643 1.全局变量 Web服务器的根目录 static char_t ...
- Dreamoon and WiFi
Dreamoon is standing at the position 0 on a number line. Drazil is sending a list of commands throug ...
- sudo用户找不到环境变量 sudo找不到/usr/local/bin 下的执行文件,
出于安全方面的考虑,使用sudo执行命令将在一个最小化的环境中执行,环境变量都重置成默认状态. 所以PATH这个变量不包括用户自定义设置的内容,如找不到/usr/local/bin/下面的命令在sud ...
- 转:unittest的几种运行方式
#unittest-test.py import unittestfrom demo import RunMainimport HtmlTestRunner class TestMethod(unit ...
- vue工程 使用滚动组件 vue2-better-scroll 实现上拉加载 下拉刷新
vue2-better-scroll 关于具体安装&使用过程 请移步api文档 已经很详细了 而且超清晰明了. https://cnpmjs.org/package/vue2-better-s ...
- 395. 至少有K个重复字符的最长子串
Q: A: 分治,对于字符串s的任何一个字符,如果它的频数(在s中出现的次数)小于k,则它一定不会出现在最后的结果里,也就是从它的位置一劈两半,考察左右.对于当前字符串s,我们先建立字典统计其中每种字 ...
- js实现图片轮播图
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- FPGA-HPS
最近在做DE1的图像方面实验,用到了HPS,所以简要谈一谈什么是HPS. 由图可知,DE1的板子就是有fpga+hps组成的: 参考自:http://bbs.eeworld.com.cn/thread ...
- Codeforces Round #598 (Div. 3) D. Binary String Minimizing
You are given a binary string of length nn (i. e. a string consisting of nn characters '0' and '1'). ...