寒假学习2

 

厦门大学林子雨,赖永炫,陶继平 编著

Spark 编程基础(Scala 版)》

教材配套

机房上机实验指南

实验 2 Scala 编程初级实践

(版本号:2018  7  19 日版本)

(题目)

主讲教师:林子雨

厦门大学数据库实验室

二零一八年七月

  

 

 

目录

目录

一、实验目的 ..................................................................................................................................1

二、实验平台 ..................................................................................................................................1

三、实验内容和要求 ......................................................................................................................1

1. 计算级数.............................................................................................................................1

2. 模拟图形绘制.....................................................................................................................1

3. 统计学生成绩.....................................................................................................................3

四、实验报告 ..................................................................................................................................4

附录 1:任课教师介绍 ......................................................................................................................5

附录 2:课程教材介绍....................................................................................................................5

附录 3:高校大数据课程公共服务平台介绍................................................................................6

主讲教师:林子雨

http://www.cs.xmu.edu.cn/linziyu

 1 

  

 

 

厦门大学林子雨,赖永炫,陶继平 编著《Spark 编程基础(Scala 版)》 教材配套机房上机实验指南

实验 2 Scala 编程初级实践

厦门大学林子雨,赖永炫,陶继平 编著

Spark 编程基础(Scala 版)》

 2  Scala 语言基础

教材配套机房上机实验指南

实验 2 Scala 编程初级实践

(题目)

主讲教师:林子雨

E-mail: ziyulin@xmu.edu.cn 个人主页http://www.cs.xmu.edu.cn/linziyu

一、实验目的

1.掌握 Scala语言的基本语法、数据结构和控制结构;

2.掌握面向对象编程的基础知识,能够编写自定义类和特质;

3.掌握函数式编程的基础知识,能够熟练定义匿名函数。熟悉 Scala的容器类库的基本

层次结构,熟练使用常用的容器类进行数据;

4.熟练掌握 Scala REPL运行模式和编译运行方法。

二、实验平台

已经配置完成的 Scala开发环境。Scala版本为 2.11.8.

三、实验内容和要求

1. 计算级数

请用脚本的方式编程计算并输出下列级数的前 n项之和 Sn,直到 Sn刚好大于或等于 q

为止,其中 q为大于 0的整数,其值通过键盘输入。

2 3 4

n +1

S = + + + +

n

1 2 3

n

    q    50.0       Sn=50.416695        

exercise2-1.scalaREPL模式下测试运行,测试样例:q=1时,Sn=2q=30时,Sn=30.891459

q=50时,Sn=50.416695

2. 模拟图形绘制

对于一个图形绘制程序,用下面的层次对各种实体进行抽象。定义一个 Drawable的特

质,其包括一个 draw方法,默认实现为输出对象的字符串表示。定义一个 Point类表示点,

其混入了 Drawable特质,并包含一个 shift方法,用于移动点。所有图形实体的抽象类为

主讲教师:林子雨

http://www.cs.xmu.edu.cn/linziyu

 1 

  

 

 

厦门大学林子雨,赖永炫,陶继平 编著《Spark 编程基础(Scala 版)》 教材配套机房上机实验指南

实验 2 Scala 编程初级实践

Shape,其构造函数包括一个 Point类型,表示图形的具体位置(具体意义对不同的具体图

形不一样)。Shape类有一个具体方法 moveTo和一个抽象方法 zoom,其中 moveTo将图形从

当前位置移动到新的位置, 各种具体图形的 moveTo可能会有不一样的地方。zoom方法实

现对图形的放缩,接受一个浮点型的放缩倍数参数,不同具体图形放缩实现不一样。继承

Shape类的具体图形类型包括直线类 Line和圆类 CircleLine类的第一个参数表示其位置,

第二个参数表示另一个端点,Line放缩的时候,其中点位置不变,长度按倍数放缩(注意,

缩放时,其两个端点信息也改变了),另外,Line move行为影响了另一个端点,需要对

move方法进行重载。Circle类第一个参数表示其圆心,也是其位置,另一个参数表示其半

径,Circle缩放的时候,位置参数不变,半径按倍数缩放。另外直线类 Line和圆类 Circle

都混入了 Drawable特质,要求对 draw进行重载实现,其中类 Line draw输出的信息样式

Line:第一个端点的坐标--第二个端点的坐标),类 Circle draw输出的信息样式为

“Circle center:圆心坐标,R=半径。如下的代码已经给出了 Drawable Point的定义,

同时也给出了程序入口 main函数的实现,请完成 Shape类、Line类和 Circle类的定义。

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

}

}

编译运行程序,期望的输出结果如下:

Point(10.0,30.0)

Line:(0.0,0.0)--(20.0,20.0)

Line:(5.0,5.0)--(25.0,25.0)

Line:(-5.0,-5.0)--(35.0,35.0)

Circle center:(10.0,10.0),R=5.0

主讲教师:林子雨

http://www.cs.xmu.edu.cn/linziyu

 2 

  

 

 

厦门大学林子雨,赖永炫,陶继平 编著《Spark 编程基础(Scala 版)》 教材配套机房上机实验指南

实验 2 Scala 编程初级实践

Circle center:(30.0,20.0),R=5.0

Circle center:(30.0,20.0),R=2.5

3. 统计学生成绩

学生的成绩清单格式如下所示,第一行为表头,各字段意思分别为学号、性别、课程名

1、课程名 2等,后面每一行代表一个学生的信息,各字段之间用空白符隔开

Id

gender Math

English

64

Physics

78

58

301610

male

80

65

301611 female

...

87

给定任何一个如上格式的清单(不同清单里课程数量可能不一样),要求尽可能采用函

数式编程,统计出各门课程的平均成绩,最低成绩,和最高成绩;另外还需按男女同学分开,

分别统计各门课程的平均成绩,最低成绩,和最高成绩。

测试样例 1如下:

Id

gender Math

male

English

64

Physics

78

301610

80

65

44

66

70

72

73

69

73

74

76

73

55

50

63

72

76

82

62

89

301611 female

301612 female

301613 female

301614 female

87

58

77

91

100

72

75

75

65

68

76

91

61

75

93

100

73

79

54

72

71

71

71

301615

male

77

301616 female

301617 female

81

77

301618

301619

301620

301621

301622

301623

male

male

male

male

male

male

61

69

62

69

69

58

301624 female

83

301625

301626

301627

male

male

male

54

66

87

301628 female

301629 male

样例 1的统计结果输出为:

80

77

course

Math:

average

69.20

min

44.00

54.00

max

89.00

87.00

English: 71.70

Physics: 76.65

54.00 100.00

course

Math:

average

72.67

min

50.00

54.00

max (males)

89.00

English: 67.75

87.00

主讲教师:林子雨

http://www.cs.xmu.edu.cn/linziyu

 3 

  

 

 

厦门大学林子雨,赖永炫,陶继平 编著《Spark 编程基础(Scala 版)》 教材配套机房上机实验指南

实验 2 Scala 编程初级实践

Physics: 75.83

61.00 100.00

course

Math:

average

64.00

min

44.00

71.00

max (females)

73.00

87.00

English: 77.63

Physics: 77.88

54.00 100.00

测试样例 2

Id

gender Math

English Physics Science

301610

301611

male 72

male 75

39

85

79

89

63

82

81

100

72

39

88

88

49

80

80

69

59

76

89

74

74

93

91

61

58

70

63

81

63

59

48

92

66

83

56

86

93

79

78

78

93

26

57

62

64

31

72

59

100

87

48

46

78

88

69

49

51

100

57

80

301612 female 85

301613 female 63

301614

301615

male 72

male 99

301616 female 100

301617 male 74

301618 female 68

301619 male 63

301620 female 84

301621

301622

301623

male 71

male 82

male 63

301624 female 86

301625

301626

male 76

male 91

301627 female 92

301628

301629

male 79

male 85

样例 2的统计结果为:

course

Math:

average min max

79.00 63.00 100.00

English: 74.05 39.00 100.00

Physics: 73.60 48.00 93.00

Science: 65.85 26.00 100.00

course

Math:

average min max

77.08 63.00 99.00

English: 70.46 39.00 100.00

Physics: 77.77 58.00 93.00

Science: 62.23 26.00 93.00

course

Math:

average min max

82.57 63.00 100.00

English: 80.71 72.00 89.00

Physics: 65.86 48.00 91.00

Science: 72.57 48.00 100.00

四、实验报告

Spark编程基础》实验报告

主讲教师:林子雨

http://www.cs.xmu.edu.cn/linziyu

 4 

  

 

 

厦门大学林子雨,赖永炫,陶继平 编著《Spark 编程基础(Scala 版)》 教材配套机房上机实验指南

实验 2 Scala 编程初级实践

题目:

姓名:

日期:

实验环境:

解决问题的思路:

实验内容与完成情况:

出现的问题:

解决方案(列出遇到的问题和解决办法,列出没有解决的问题):

附录 1:任课教师介绍

林子雨(1978),,博士,厦门大学计算机科学系助理教授,主要研究领域为

数据库,数据仓库,数据挖掘,大数据

主讲课程:《大数据处理技术》

办公地点:厦门大学海韵园科研 2 号楼

E-mail: ziyulin@xmu.edu.cn

个人主页:http://www.cs.xmu.edu.cn/linziyu

数据库实验室网站:http://dblab.xmu.edu.cn

附录 2:课程教材介绍

林子雨、赖永炫、陶继平编著《Spark 编程基础(Scala 版)》

人民邮电出版社 ISBN:978-7-115-48816-9 定价:49.80 

厦门大学林子雨、赖永炫和陶继平老师编著《Spark 编程基础》,以 Scala 作为开发 Spark

应用程序的编程语言,系统介绍了 Spark 编程的基础知识。全书共 8 章,内容包括大数据技

术概述、Scala 语言基础、Spark 的设计与运行原理、Spark 环境搭建和使用方法、RDD 编程、

Spark SQLSpark StreamingSpark MLlib 等。本书每个章节都安排了入门级的编程实践操

主讲教师:林子雨

http://www.cs.xmu.edu.cn/linziyu

 5 

  

 

 

厦门大学林子雨,赖永炫,陶继平 编著《Spark 编程基础(Scala 版)》 教材配套机房上机实验指南

实验 2 Scala 编程初级实践

作,以便读者更好地学习和掌握 Spark 编程方法。本书官网免费提供了全套的在线教学资源,

包括讲义 PPT、习题、源代码、软件、数据集、授课视频、上机实验指南等。

本书可以作为高等院校计算机、软件工程、数据科学与大数据技术等专业的进阶级大数

据课程教材,用于指导 Spark 编程实践,也可供相关技术人员参考。

欢迎访问《Spark 编程基础》教材官方网站:http://dblab.xmu.edu.cn/post/spark/

扫一扫访问教材官网

附录 3:高校大数据课程公共服务平台介绍

高校大数据课程公共服务平台,由中国高校首个数字教师的提出者和建设者——

子雨老师发起,由厦门大学数据库实验室全力打造,由厦门大学云计算与大数据研究中心、

海峡云计算与大数据应用研究中心携手共建。这是国内第一个服务于高校大数据课程建设的

公共服务平台,旨在促进国内高校大数据课程体系建设,提高大数据课程教学水平,降低大

数据课程学习门槛,提升学生课程学习效果。平台服务对象涵盖高校、教师和学生。平台为

高校开设大数据课程提供全流程辅助,为教师开展教学工作提供一站式服务,为学生学习大

数据课程提供全方位辅导。平台重点打造11  1 工程,即 1 本教材(含官网)、1 个教师

服务站、个学生服务站、1 个公益项目、1 堂巡讲公开课、1 个示范班级、1 门在线课程、

1 个交流群(QQ 群、微信群)、1 个保障团队、1 个培训基地和 1 个实验平台。目前平台每

年访问量已经超过 100 万次,成为国内高校大数据教学知名品牌。

平台主页:http://dblab.xmu.edu.cn/post/bigdata-teaching-platform/

主讲教师:林子雨

http://www.cs.xmu.edu.cn/linziyu

 6 

  

 

 

厦门大学林子雨,赖永炫,陶继平 编著《Spark 编程基础(Scala 版)》 教材配套机房上机实验指南

实验 2 Scala 编程初级实践

扫一扫访问平台主页

主讲教师:林子雨

http://www.cs.xmu.edu.cn/linziyu

 

 

 

 代码如下:

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)
}
}

abstract class Shape(var location:Point){
//location是Shape的一个可变字段
def moveTo(newLocation:Point){
//默认实现,只是修改位置
location = newLocation
}
def zoom(scale:Double)
}
class Line(beginPoint:Point,var endPoint:Point) extends
Shape(beginPoint) with Drawable{
override def draw(){
println(s"Line:(${location.x},${location.y})--(${endPoint.x},${endPoint.y})")
}
//按指定格式重载click
override def moveTo(newLocation:Point){
endPoint.shift(newLocation.x - location.x,newLocation.y -location.y)
//直线移动时,先移动另外一个端点
location = newLocation //移动位置
}
override def zoom(scale:Double){
val midPoint = Point((endPoint.x + location.x)/2,(endPoint.y +location.y)/2)
//求出中点,并按中点进行缩放
location.x = midPoint.x + scale * (location.x - midPoint.x)
location.y = midPoint.y + scale * (location.y -midPoint.y)
endPoint.x = midPoint.x + scale * (endPoint.x - midPoint.x)
endPoint.y = midPoint.y + scale * (endPoint.y -midPoint.y)
}
}
class Circle(center:Point,var radius:Double) extends Shape(center) with Drawable{
override def draw(){
//按指定格式重载click
println(s"Circlecenter:(${location.x},${location.y}),R=$radius")
}
override def zoom(scale:Double){
radius = radius*scale //对圆的缩放只用修改半径
}
}

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
}
}

 

 

  

posted @ 2024-01-16 17:06  云边上打盹  阅读(13)  评论(0)    收藏  举报