当前位置:   article > 正文

Spark项目实训(一)_spark实训代码

spark实训代码

目录

实验任务一:计算级数

idea步骤分步:

完整代码:

 linux步骤分布:

实验任务二:统计学生成绩

idea步骤分布:

完整代码:

linux步骤分步:


实验任务一:计算级数

请用脚本的方式编程计算并输出下列级数的前 n 项之和 Sn,直到 Sn 刚好大于或等于 q 为止,其中 q 为大于 0 的整数,其值通过键盘输 入。 

例如,若 q 的值为 50.0,则输出应为:Sn=50.416695。请将源文件 保存为 exercise2-1.scala,在 REPL 模式下测试运行,测试样例: q=1 时,Sn=2;q=30 时,Sn=30.891459;q=50 时,Sn=50.416695。

idea步骤分步:

// 导入输入输出库

import scala.io.StdIn._

  1. // 导入输入输出库
  2. import scala.io.StdIn._

// 初始化 Sn 变量为 0

  1. // 初始化 Sn 变量为 0
  2. var Sn: Double = 0.0

// 初始化 n 变量为 1

// 读取用户输入的 q 并赋值给变量 q

val q = StdIn.readInt()

  1. // 读取用户输入的 q 并赋值给变量 q
  2. println("请输入一个大于0的数q:")
  3. val q = readDouble()

// 当 Sn 小于 q 时执行循环

  1. // 当 Sn 小于 q 时执行循环
  2. while (Sn < q) {
  3. }

// Sn 的值加上(n+1)/n

  1. // Sn 的值加上 (n+1)/n
  2. Sn += (n + 1) / n.toDouble

// n 自增 1

  1. // n 自增 1
  2. n += 1

// 输出 Sn 的最终值

  1. // 输出 Sn 的最终值
  2. println(s"Sn=$Sn")

完整代码:

  1. // 导入输入输出库
  2. import scala.io.StdIn._
  3. object facaigao {
  4. def main(args: Array[String]): Unit = {
  5. // 读取用户输入的 q 并赋值给变量 q
  6. println("请输入一个大于0的数q:")
  7. val q = readDouble()
  8. // 初始化 Sn 变量为 0
  9. var Sn: Double = 0.0
  10. // 初始化 n 变量为 1
  11. var n: Int = 1
  12. // 当 Sn 小于 q 时执行循环
  13. while (Sn < q) {
  14. // Sn 的值加上 (n+1)/n
  15. Sn += (n + 1) / n.toDouble
  16. // n 自增 1
  17. n += 1
  18. }
  19. // 输出 Sn 的最终值
  20. println(s"Sn=$Sn")
  21. }
  22. }

 linux步骤分布:

1、开启 scala 命令行:

  1. [root@master ~]# su - hadoop
  2. [hadoop@master ~]$ cd /usr/local/src/scala/bin
  3. [hadoop@master bin]$ ./scala
标题

2、执行下面的代码: 

  1. // 导入输入输出库
  2. scala> import io.StdIn._
  3. // 初始化 Sn 变量为 0
  4. scala> var Sn:Float = 0
  5. // 初始化 n 变量为 1
  6. scala> var n:Float=1
  7. // 输出提示信息让用户输入 q
  8. scala> println("please input q:")
  9. // 读取用户输入的 q 并赋值给变量 q
  10. scala> val q = readInt()
  11. // 当 Sn 小于 q 时执行循环
  12. scala> while(Sn<q){
  13. | Sn+=(n+1)/n // Sn 的值加上(n+1)/n
  14. | n+=1 // n 自增 1
  15. | }
  16. // 输出 Sn 的最终值
  17. scala> println(s"Sn=$Sn")

其中 val q = readInt()表示在 linux shell 终端输入 q 的 值,执行代码之后会一直监听窗口,等待键盘输入 q 的值,这里设 置了 q=30。

 最后输入 :q 退出 scala shell

实验任务二:统计学生成绩

学生的成绩清单格式如下所示,第一行为表头,各字段意思分别为 学号、性别、课程名 1、课程名 2 等,后面每一行代表一个学生的 信息,各字段之间用空白符隔开, 给定任何一个如上格式的清单(不同清单里课程数量可能不一样), 要求尽可能采用函数式编程,统计出各门课程的平均成绩,最低成 绩,和最高成绩;另外还需按男女同学

  1. Id gender Math English Physics Science
  2. 301610 male 72 39 74 93
  3. 301611 male 75 85 93 26
  4. 301612 female 85 79 91 57
  5. 301613 female 63 89 61 62
  6. 301614 male 72 63 58 64
  7. 301615 male 99 82 70 31
  8. 301616 female 100 81 63 72
  9. 301617 male 74 100 81 59
  10. 301618 female 68 72 63 100
  11. 301619 male 63 39 59 87
  12. 301620 female 84 88 48 48
  13. 301621 male 71 88 92 46
  14. 301622 male 82 49 66 78
  15. 301623 male 63 80 83 88
  16. 301624 female 86 80 56 69
  17. 301625 male 76 69 86 49
  18. 301626 male 91 59 93 51
  19. 301627 female 92 76 79 100
  20. 301628 male 79 89 78 57
  21. 301629 male 85 74 78 80

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

桌面创建数据文件名字为1.txt

  1. Id gender Math English Physics
  2. 301610 male 80 64 78
  3. 301611 female 65 87 58
  4. 301612 female 44 71 77
  5. 301613 female 66 71 91
  6. 301614 female 70 71 100
  7. 301615 male 72 77 72
  8. 301616 female 73 81 75
  9. 301617 female 69 77 75
  10. 301618 male 73 61 65
  11. 301619 male 74 69 68
  12. 301620 male 76 62 76
  13. 301621 male 73 69 91
  14. 301622 male 55 69 61
  15. 301623 male 50 58 75
  16. 301624 female 63 83 93
  17. 301625 male 72 54 100
  18. 301626 male 76 66 73
  19. 301627 male 82 87 79
  20. 301628 female 62 80 54
  21. 301629 male 89 77 72

桌面创建数据文件名字为2.txt

idea步骤分布:

// 从文件中读取数据
  1. val inputFile = scala.io.Source.fromFile("C:\\Users\\Administrator\\Desktop\\1.txt")
  2. val originalData =inputFile.getLines.map{_.split("\\s+")}.toList
// 获取课程名和学生数据
val courseNames = originalData.head.drop(2) // 将第一行数据中
//前两列去除,其余作为课程名
  1. val allStudents = originalData.tail // 剩余行数据为所有学生数据
  2. val courseNum = courseNames.length // 课程数量
// 定义统计函数
  1. def statistc(lines: List[Array[String]]) = {
  2. // 遍历每门课程,计算总分、最低分和最高分
  3. (for (i <- 2 to courseNum+1) yield {
  4. val temp = lines map { elem => elem(i).toDouble } //获取每门课程的成绩数据
  5. (temp.sum, temp.min, temp.max) // 计算总分、最低分和最高分
  6. }) map { case (total, min, max) => (total / lines.length,
  7. min, max) } // 计算平均分
  8. }
// 输出结果函数
  1. def printResult(theresult: Seq[(Double, Double, Double)]) {
  2. // 将课程名和结果对应输出
  3. (courseNames zip theresult) foreach {
  4. case (course, result) => println(f"${course + ":"}%-10s${result._1}%5.2f${result._2}%8.2f${result._3}%8.2f")
  5. }
  6. }
// 统计全体学生数据并输出结果
  1. val allResult = statistc(allStudents)
  2. println("course average min max")
  3. printResult(allResult)
// 按性别划分数据
val (maleLines, femaleLines) = allStudents partition { _(1)== "male" }
// 统计男学生数据并输出结果
val maleResult = statistc(maleLines)
// 统计女学生数据并输出结果
  1. val femaleResult = statistc(femaleLines)
  2. println("course average min max")
  3. printResult(femaleResult)

完整代码:

  1. package facaigao
  2. object facaigao2{
  3. def main(args: Array[String]): Unit = {
  4. // 从文件中读取数据
  5. val inputFile = scala.io.Source.fromFile("C:\\Users\\Administrator\\Desktop\\1.txt")
  6. val originalData = inputFile.getLines.map{_.split("\\s+")}.toList
  7. // 获取课程名和学生数据
  8. val courseNames = originalData.head.drop(2) // 将第一行数据中
  9. //前两列去除,其余作为课程名
  10. val allStudents = originalData.tail // 剩余行数据为所有学生数据
  11. val courseNum = courseNames.length // 课程数量
  12. // 定义统计函数
  13. def statistc(lines: List[Array[String]]) = {
  14. // 遍历每门课程,计算总分、最低分和最高分
  15. (for (i <- 2 to courseNum+1) yield {
  16. val temp = lines map { elem => elem(i).toDouble } //获取每门课程的成绩数据
  17. (temp.sum, temp.min, temp.max) // 计算总分、最低分和最高分
  18. }) map { case (total, min, max) => (total / lines.length,
  19. min, max) } // 计算平均分
  20. }
  21. // 输出结果函数
  22. def printResult(theresult: Seq[(Double, Double, Double)]) {
  23. // 将课程名和结果对应输出
  24. (courseNames zip theresult) foreach {
  25. case (course, result) => println(f"${course + ":"}%-10s${result._1}%5.2f${result._2}%8.2f${result._3}%8.2f")
  26. }
  27. }
  28. // 统计全体学生数据并输出结果
  29. val allResult = statistc(allStudents)
  30. println("course average min max")
  31. printResult(allResult)
  32. // 按性别划分数据
  33. val (maleLines, femaleLines) = allStudents partition { _(1)== "male" }
  34. // 统计男学生数据并输出结果
  35. val maleResult = statistc(maleLines)
  36. println("course average min max")
  37. printResult(maleResult)
  38. // 统计女学生数据并输出结果
  39. val femaleResult = statistc(femaleLines)
  40. println("course average min max")
  41. printResult(femaleResult)
  42. }
  43. }

 

 

样例1运行结果 

 样例2运行结果:

linux步骤分步:

创建代码文件夹

  1. [hadoop@master myscalacode]$ cd /
  2. [hadoop@master /]$ sudo mkdir myscalacode2

创建数据源文件

  1. [hadoop@master /]$ cd myscalacode2
  2. [hadoop@master myscalacode2]$ sudo vim test.txt

按 i 进入编辑模式,输入以下测试样例 1或者测试样例 2 的数据 (这里以测试样例 1 举例)

样例1 

  1. Id gender Math English Physics
  2. 301610 male 80 64 78
  3. 301611 female 65 87 58
  4. 301612 female 44 71 77
  5. 301613 female 66 71 91
  6. 301614 female 70 71 100
  7. 301615 male 72 77 72
  8. 301616 female 73 81 75
  9. 301617 female 69 77 75
  10. 301618 male 73 61 65
  11. 301619 male 74 69 68
  12. 301620 male 76 62 76
  13. 301621 male 73 69 91
  14. 301622 male 55 69 61
  15. 301623 male 50 58 75
  16. 301624 female 63 83 93
  17. 301625 male 72 54 100
  18. 301626 male 76 66 73
  19. 301627 male 82 87 79
  20. 301628 female 62 80 54
  21. 301629 male 89 77 72

 样例2

  1. Id gender Math English Physics Science
  2. 301610 male 72 39 74 93
  3. 301611 male 75 85 93 26
  4. 301612 female 85 79 91 57
  5. 301613 female 63 89 61 62
  6. 301614 male 72 63 58 64
  7. 301615 male 99 82 70 31
  8. 301616 female 100 81 63 72
  9. 301617 male 74 100 81 59
  10. 301618 female 68 72 63 100
  11. 301619 male 63 39 59 87
  12. 301620 female 84 88 48 48
  13. 301621 male 71 88 92 46
  14. 301622 male 82 49 66 78
  15. 301623 male 63 80 83 88
  16. 301624 female 86 80 56 69
  17. 301625 male 76 69 86 49
  18. 301626 male 91 59 93 51
  19. 301627 female 92 76 79 100
  20. 301628 male 79 89 78 57
  21. 301629 male 85 74 78 80

添加完毕之后按 Esc 键退出编辑模式,输入“:wq”保存退出

新建 scala 文件并编写代码

[hadoop@master myscalacode2]$ sudo vim scoreReport.scala

i 进入编辑模式,编写以下代码

  1. object scoreReport {
  2. def main(args: Array[String]) {
  3. // 从文件中读取数据
  4. val inputFile = scala.io.Source.fromFile("test.txt")
  5. val originalData =
  6. inputFile.getLines.map{_.split("\\s+")}.toList
  7. // 获取课程名和学生数据
  8. val courseNames = originalData.head.drop(2) // 将第一行数据中
  9. 前两列去除,其余作为课程名
  10. val allStudents = originalData.tail // 剩余行数据为所有学生数
  11. val courseNum = courseNames.length // 课程数量
  12. // 定义统计函数
  13. def statistc(lines: List[Array[String]]) = {
  14. // 遍历每门课程,计算总分、最低分和最高分
  15. (for (i <- 2 to courseNum+1) yield {
  16. val temp = lines map { elem => elem(i).toDouble } //
  17. 获取每门课程的成绩数据
  18. (temp.sum, temp.min, temp.max) // 计算总分、最低分和
  19. 最高分
  20. }) map { case (total, min, max) => (total / lines.length,
  21. min, max) } // 计算平均分
  22. }
  23. // 输出结果函数
  24. def printResult(theresult: Seq[(Double, Double, Double)]) {
  25. // 将课程名和结果对应输出
  26. (courseNames zip theresult) foreach {
  27. case (course, result) => println(f"${course + ":"}%-
  28. 10s${result._1}%5.2f${result._2}%8.2f${result._3}%8.2f")
  29. }
  30. }
  31. // 统计全体学生数据并输出结果
  32. val allResult = statistc(allStudents)
  33. println("course average min max")
  34. printResult(allResult)
  35. // 按性别划分数据
  36. val (maleLines, femaleLines) = allStudents partition { _(1)
  37. == "male" }
  38. // 统计男学生数据并输出结果
  39. val maleResult = statistc(maleLines)
  40. println("course average min max")
  41. printResult(maleResult)
  42. // 统计女学生数据并输出结果
  43. val femaleResult = statistc(femaleLines)
  44. println("course average min max")
  45. printResult(femaleResult)
  46. }
  47. }

编译并运行程序 

  1. [hadoop@master myscalacode2]$ sudo /usr/local/src/scala/bin/scalac
  2. scoreReport.scala
  3. [hadoop@master myscalacode2]$ ls
  1. [hadoop@master myscalacode2]$ sudo /usr/local/src/scala/bin/scala
  2. scoreReport

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

  1. course average min max
  2. Math: 69.20 44.00 89.00
  3. English: 71.70 54.00 87.00
  4. Physics: 76.65 54.00 100.00
  5. course average min max (males)
  6. Math: 72.67 50.00 89.00
  7. English: 67.75 54.00 87.00
  8. Physics: 75.83 61.00 100.00
  9. course average min max (females)
  10. Math: 64.00 44.00 73.00
  11. English: 77.63 71.00 87.00
  12. Physics: 77.88 54.00 100.00

样例 2 的统计结果为:

  1. course average min max
  2. Math: 79.00 63.00 100.00
  3. English: 74.05 39.00 100.00
  4. Physics: 73.60 48.00 93.00
  5. Science: 65.85 26.00 100.00
  6. course average min max
  7. Math: 77.08 63.00 99.00
  8. English: 70.46 39.00 100.00
  9. Physics: 77.77 58.00 93.00
  10. Science: 62.23 26.00 93.00
  11. course average min max
  12. Math: 82.57 63.00 100.00
  13. English: 80.71 72.00 89.00
  14. Physics: 65.86 48.00 91.00
  15. Science: 72.57 48.00 100.00

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/776005
推荐阅读
相关标签
  

闽ICP备14008679号