Spark项目实训(一)

news2024/12/22 14:31:44

目录

实验任务一:计算级数

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._

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

// 初始化 Sn 变量为 0

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

// 初始化 n 变量为 1

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

val q = StdIn.readInt()

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

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

// 当 Sn 小于 q 时执行循环
    while (Sn < q) {

    }

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

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

// n 自增 1

// n 自增 1
      n += 1

// 输出 Sn 的最终值

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

完整代码:

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

object facaigao {
  def main(args: Array[String]): Unit = {
    // 读取用户输入的 q 并赋值给变量 q
    println("请输入一个大于0的数q:")
    val q = readDouble()
    // 初始化 Sn 变量为 0
    var Sn: Double = 0.0
    // 初始化 n 变量为 1
    var n: Int = 1
    // 当 Sn 小于 q 时执行循环
    while (Sn < q) {
      // Sn 的值加上 (n+1)/n
      Sn += (n + 1) / n.toDouble
      // n 自增 1
      n += 1
    }
    // 输出 Sn 的最终值
    println(s"Sn=$Sn")
  }
}

 linux步骤分布:

1、开启 scala 命令行:

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

2、执行下面的代码: 

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

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

 最后输入 :q 退出 scala shell

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

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

Id gender Math English Physics Science
301610 male 72 39 74 93
301611 male 75 85 93 26
301612 female 85 79 91 57
301613 female 63 89 61 62
301614 male 72 63 58 64
301615 male 99 82 70 31
301616 female 100 81 63 72
301617 male 74 100 81 59
301618 female 68 72 63 100
301619 male 63 39 59 87
301620 female 84 88 48 48
301621 male 71 88 92 46
301622 male 82 49 66 78
301623 male 63 80 83 88
301624 female 86 80 56 69
301625 male 76 69 86 49
301626 male 91 59 93 51
301627 female 92 76 79 100
301628 male 79 89 78 57
301629 male 85 74 78 80

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

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

Id gender Math English Physics
301610 male 80 64 78
301611 female 65 87 58
301612 female 44 71 77
301613 female 66 71 91
301614 female 70 71 100
301615 male 72 77 72
301616 female 73 81 75
301617 female 69 77 75
301618 male 73 61 65
301619 male 74 69 68
301620 male 76 62 76
301621 male 73 69 91
301622 male 55 69 61
301623 male 50 58 75
301624 female 63 83 93
301625 male 72 54 100
301626 male 76 66 73
301627 male 82 87 79
301628 female 62 80 54
301629 male 89 77 72

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

idea步骤分布:

// 从文件中读取数据
val inputFile = scala.io.Source.fromFile("C:\\Users\\Administrator\\Desktop\\1.txt")
val originalData =inputFile.getLines.map{_.split("\\s+")}.toList
// 获取课程名和学生数据
val courseNames = originalData.head.drop(2) // 将第一行数据中
//前两列去除,其余作为课程名
val allStudents = originalData.tail // 剩余行数据为所有学生数据
    val courseNum = courseNames.length // 课程数量
// 定义统计函数
 def statistc(lines: List[Array[String]]) = {
      // 遍历每门课程,计算总分、最低分和最高分
      (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) } // 计算平均分
    }
// 输出结果函数
 def printResult(theresult: Seq[(Double, Double, Double)]) {
      // 将课程名和结果对应输出
      (courseNames zip theresult) foreach {
        case (course, result) => println(f"${course + ":"}%-10s${result._1}%5.2f${result._2}%8.2f${result._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)
// 统计女学生数据并输出结果
val femaleResult = statistc(femaleLines)
    println("course average min max")
    printResult(femaleResult)

完整代码:

package facaigao

object facaigao2{
  def main(args: Array[String]): Unit = {
    // 从文件中读取数据
    val inputFile = scala.io.Source.fromFile("C:\\Users\\Administrator\\Desktop\\1.txt")
    val originalData = inputFile.getLines.map{_.split("\\s+")}.toList
    // 获取课程名和学生数据
    val courseNames = originalData.head.drop(2) // 将第一行数据中
    //前两列去除,其余作为课程名
    val allStudents = originalData.tail // 剩余行数据为所有学生数据
    val courseNum = courseNames.length // 课程数量
    // 定义统计函数
    def statistc(lines: List[Array[String]]) = {
      // 遍历每门课程,计算总分、最低分和最高分
      (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) } // 计算平均分
    }
    // 输出结果函数
    def printResult(theresult: Seq[(Double, Double, Double)]) {
      // 将课程名和结果对应输出
      (courseNames zip theresult) foreach {
        case (course, result) => println(f"${course + ":"}%-10s${result._1}%5.2f${result._2}%8.2f${result._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)
  }
}

 

 

样例1运行结果 

 样例2运行结果:

linux步骤分步:

创建代码文件夹

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

创建数据源文件

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

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

样例1 

Id gender Math English Physics
301610 male 80 64 78
301611 female 65 87 58
301612 female 44 71 77
301613 female 66 71 91
301614 female 70 71 100
301615 male 72 77 72
301616 female 73 81 75
301617 female 69 77 75
301618 male 73 61 65
301619 male 74 69 68
301620 male 76 62 76
301621 male 73 69 91
301622 male 55 69 61
301623 male 50 58 75
301624 female 63 83 93
301625 male 72 54 100
301626 male 76 66 73
301627 male 82 87 79
301628 female 62 80 54
301629 male 89 77 72

 样例2

Id gender Math English Physics Science
301610 male 72 39 74 93
301611 male 75 85 93 26
301612 female 85 79 91 57
301613 female 63 89 61 62
301614 male 72 63 58 64
301615 male 99 82 70 31
301616 female 100 81 63 72
301617 male 74 100 81 59
301618 female 68 72 63 100
301619 male 63 39 59 87
301620 female 84 88 48 48
301621 male 71 88 92 46
301622 male 82 49 66 78
301623 male 63 80 83 88
301624 female 86 80 56 69
301625 male 76 69 86 49
301626 male 91 59 93 51
301627 female 92 76 79 100
301628 male 79 89 78 57
301629 male 85 74 78 80

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

新建 scala 文件并编写代码

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

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

object scoreReport {
 def main(args: Array[String]) {
 // 从文件中读取数据
 val inputFile = scala.io.Source.fromFile("test.txt")
 val originalData =
inputFile.getLines.map{_.split("\\s+")}.toList
 // 获取课程名和学生数据
 val courseNames = originalData.head.drop(2) // 将第一行数据中
前两列去除,其余作为课程名
 val allStudents = originalData.tail // 剩余行数据为所有学生数
据
 val courseNum = courseNames.length // 课程数量
 // 定义统计函数
 def statistc(lines: List[Array[String]]) = {
 // 遍历每门课程,计算总分、最低分和最高分
 (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) } // 计算平均分
 }
 // 输出结果函数
 def printResult(theresult: Seq[(Double, Double, Double)]) {
 // 将课程名和结果对应输出
 (courseNames zip theresult) foreach {
 case (course, result) => println(f"${course + ":"}%-
10s${result._1}%5.2f${result._2}%8.2f${result._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)
 }
}

编译并运行程序 

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

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

course average min max 
Math: 69.20 44.00 89.00 
English: 71.70 54.00 87.00 
Physics: 76.65 54.00 100.00 
course average min max (males) 
Math: 72.67 50.00 89.00 
English: 67.75 54.00 87.00 
Physics: 75.83 61.00 100.00 
course average min max (females) 
Math: 64.00 44.00 73.00 
English: 77.63 71.00 87.00 
Physics: 77.88 54.00 100.00

样例 2 的统计结果为:

course average min max
Math: 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 average min max
Math: 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 average min max
Math: 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1690394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在cPanel面板中开启盗链保护

本周有一个客户&#xff0c;购买Hostease的主机&#xff0c; 客户购买的是Linux虚拟主机&#xff0c;带cPanel面板的。询问我们的在线客服&#xff0c;如何可以防止他的网站上的图片不被盗用。cPanel的盗链保护功能可以帮助客户防止图片被盗链。 盗链&#xff08;Hotlinking&a…

代码随想录-算法训练营day46【动态规划08:单词拆分、多重背包!背包问题总结篇!】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第九章 动态规划part08● 139.单词拆分 ● 关于多重背包&#xff0c;你该了解这些&#xff01; ● 背包问题总结篇&#xff01; 详细布置 关于 多重背包&#xff0c;力扣上没有相关的题目&#xff0c;所以今天大家的…

05.cv PIL torch

文章目录 opencvrectanglecircle保存图像 PILresize与Opencv的互操作 torchtensor的创建和定义Torch的自动梯度计算Torch的模块torch的训练流程 opencv plt.imshow 以RGB形式显示cv2.imread 读取的是BGR import cv2 image cv2.imread(image.png) #加载图像 print(image.shap…

Linux--软硬链接

目录 0.文件系统 1.软硬链接 1.1见一下软硬链接 1.2软硬链接的特征 1.3软硬链接是什么&#xff0c;有什么作用&#xff08;场景&#xff09; 0.文件系统 Linux--文件系统-CSDN博客 1.软硬链接 1.1见一下软硬链接 1.这是软链接 这个命令在Unix和Linux系统中用于创建一个符号…

什么是DNS缓存投毒攻击,有什么防护措施

随着企业组织数字化步伐的加快&#xff0c;域名系统&#xff08;DNS&#xff09;作为互联网基础设施的关键组成部分&#xff0c;其安全性愈发受到重视。然而&#xff0c;近年来频繁发生的针对DNS的攻击事件&#xff0c;已经成为企业组织数字化发展中的一个严重问题。而在目前各…

vue学习3:开发者调试工具的下载安装

极简插件官网_Chrome插件下载_Chrome浏览器应用商店 (zzzmh.cn) 测试运行程序 网页中右键检查

【Unity3D美术】URP渲染管线学习01

扫盲简介 URP渲染管线是Unity3d提供的一种视觉效果更好的渲染模式&#xff0c;类似的还有Built RP&#xff08;默认最普通的渲染模式&#xff09;\ HDRP(超高清&#xff0c;对设备要求高)&#xff0c;视觉效果好&#xff0c;而且占用资源少&#xff01;成为主流渲染管线模式&a…

十进制同步计数器

十进制同步计数器 使用最多的十进制计数器是按照 8421 BCD 码进行计数的电路 十进制同步加法计数器 【例1】设计一个十进制同步加法计数器&#xff0c;要求电路按 8421 BCD 码进行加法计数 Step1&#xff1a;建立原始状态转换图 Step2&#xff1a;选触发器&#xff0c;求方…

粉丝问,有没有UI的统计页面,安排!

移动应用的数据统计页面具有以下几个重要作用&#xff1a; 监控业务指标&#xff1a;数据统计页面可以帮助用户监控关键业务指标和数据&#xff0c;例如用户活跃度、销售额、转化率等。通过实时更新和可视化呈现数据&#xff0c;用户可以及时了解业务的整体状况和趋势。分析用…

LeetCode 128 最长连续序列(hot100) 解题思路分享

题干&#xff1a; 思路&#xff1a; 如果对时间复杂度没有要求的话&#xff0c;可以先排序&#xff0c;再一段一段地找&#xff0c;这样的好处是空间占用小。 如果希望On的话&#xff0c;那就采取设置一个Set的方法&#xff0c;这样空间复杂度是On&#xff0c;但是时间复杂度…

CPP Con 2020:Type Traits I

先谈谈Meta Programming 啥是元编程呢&#xff1f;很简单&#xff0c;就是那些将其他程序当作数据来进行处理和传递的编程&#xff08;私人感觉有点类似于函数式&#xff1f;&#xff09;这个其他程序可以是自己也可以是其他程序。元编程可以发生在编译时也可以发生在运行时。…

Python实现将LabelMe生成的JSON格式转换成YOLOv8支持的TXT格式

标注工具 LabelMe 生成的标注文件为JSON格式&#xff0c;而YOLOv8中支持的为TXT文件格式。以下Python代码实现3个功能&#xff1a; 1.将JSON格式转换成TXT格式&#xff1b; 2.将数据集进行随机拆分&#xff0c;生成YOLOv8支持的目录结构&#xff1b; 3.生成YOLOv8支持的YAML文件…

探索亚马逊云科技技术课程:大模型平台与提示工程的应用与优化

上方图片源自亚马逊云科技【生成式 AI 精英速成计划】技术开发技能课程 前言 学习了亚马逊云科技–技术开发技能课程 本课程分为三个部分&#xff0c;了解如何使用大模型平台、如何训练与部署大模型及生成式AI产品应用与开发&#xff0c;了解各类服务的优势、功能、典型使用案…

【QT八股文】系列之篇章2 | QT的信号与槽机制及通讯流程

【QT八股文】系列之篇章2 | QT的信号与槽机制及通讯流程 前言2. 信号与槽信号与槽机制介绍/本质/原理&#xff0c;什么是Qt信号与槽机制&#xff1f;如何在Qt中使用&#xff1f;信号与槽机制原理&#xff0c;解析流程Qt信号槽的调用流程信号与槽机制的优缺点信号与槽机制需要注…

【软考中级 软件设计师】数据结构

数据结构是计算机科学中一个基础且重要的概念&#xff0c;它研究数据的存储结构以及在此结构上执行的各种操作。在准备软考中级-软件设计师考试时&#xff0c;掌握好数据结构部分对于通过考试至关重要。下面是一些核心知识点概览&#xff1a; 基本概念&#xff1a; 数据结构定义…

在NVIDIA Jetson Nano上部署YOLOv5算法,并使用TensorRT和DeepStream进行加速

部署YOLOv5算法在NVIDIA Jetson Nano上并使用TensorRT和DeepStream进行加速涉及几个关键步骤。下面是一个详细的指南&#xff1a; 步骤 1: 准备YOLOv5模型 训练或下载预训练模型&#xff1a;首先&#xff0c;你需要有一个YOLOv5模型。你可以自己训练一个模型&#xff0c;或者…

响应式处理-一篇打尽

纯pc端响应式 pc端平常用到的响应式布局 大致就如下三种&#xff0c;当然也会有其他方法&#xff0c;欢迎评论区补充 将div height、width设置成100% flex布局 flex布局主要是将flex-wrap: wrap&#xff0c; 最后&#xff0c;你可以通过给子元素设置 flex 属性来控制它们的…

构建全面的无障碍学习环境:科技之光,照亮学习之旅

在信息与科技日益发展的当下&#xff0c;为所有人群提供一个包容和平等的学习环境显得尤为重要&#xff0c;特别是对于盲人朋友而言&#xff0c;无障碍学习环境的构建成为了一项亟待关注与深化的课题。一款名为“蝙蝠避障”的辅助软件&#xff0c;以其创新的设计理念与实用功能…

Excel 按顺序去重再编号

Excel的A有重复数据&#xff1a; A1Cow2Chicken3Horse4Butterfly5Cow 现在要去除重复&#xff0c;用自然数按顺序进行编号&#xff0c;结果写在相邻列&#xff1a; AB1Cow12Chicken23Horse34Butterfly45Cow1 使用 SPL XLL&#xff0c;输入公式并向下拖&#xff1a; spl(&q…

云平台的安全能力提升解决方案

提升云平台的安全能力是确保数据和服务安全的关键步骤。针对大型云平台所面临的云上安全建设问题&#xff0c;安全狗提供完整的一站式云安全解决方案&#xff0c;充分匹配云平台安全管理方的需求和云租户的安全需求。协助大型云平台建设全网安全态势感知、统一风险管理、统一资…