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

// 导入输入输出库  
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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux001】centos常用命令总结总结(已更新)

1.熟悉、梳理、总结下centos知识体系。 2.Linux相关知识&#xff0c;在日常开发中必不可少&#xff0c;如一些必知必会的常用命令&#xff0c;如环境搭建、应用部署等。同时&#xff0c;也要谨慎使用一些命令&#xff0c;如rm -rf&#xff0c;防止一些生产事故的发生。 3.欢迎点…

洗衣行业在线预约小程序源码系统 在线下单+上门取件+订单状态跟踪 带网站的源代码包以及搭建部署教程

开发背景 在现代社会&#xff0c;人们越来越注重时间的利用和生活的便捷性。传统的洗衣服务模式往往需要消费者亲自将衣物送到洗衣店&#xff0c;然后再等待取衣&#xff0c;整个过程既耗时又不方便。此外&#xff0c;随着移动互联网的普及&#xff0c;人们更习惯于通过手机应…

Soybean Admin:一款高效、现代化的后台管理模板探索

随着前端技术的快速发展&#xff0c;越来越多的开发者开始寻求使用最新技术栈来构建高效、用户友好的后台管理系统。Soybean Admin作为一款基于Vue3、Vite5、TypeScript、Pinia、NaiveUI和UnoCSS等前沿技术的后台管理模板&#xff0c;为我们提供了一个全新的解决方案。本文将深…

List、IList、ArrayList 和 Dictionary

List 类型: 泛型类命名空间: System.Collections.Generic作用: List<T> 表示一个强类型的对象列表&#xff0c;可以通过索引访问。提供了搜索、排序和操作列表的方法。特点: 类型安全&#xff0c;性能较好&#xff0c;适用于需要强类型和高效操作的场景。例子: List<…

数字人系统OEM源码及赚钱方式详解!

当前&#xff0c;数字人直播的热度持续上涨&#xff0c;应用场景日益丰富。而随着数字人直播所蕴含的前景和潜力被不断挖掘一批又一批的创业者纷纷开始入局分羹。其中&#xff0c;数字人系统OEM源码模式作为最为常见的入局方式之一&#xff0c;更是备受瞩目。 所谓数字人系统O…

【个人经历分享】末流本科地信,毕业转码经验

本人24届末流本科&#xff0c;地理信息科学专业。 我们这个专业可以说是 “高不成&#xff0c;低不就”的专业&#xff0c;什么都学但都不精。考研我实在是卷不动同学历的人&#xff0c;我在大三的时候就开始考虑转码。 至于我为什么选择转码&#xff0c;选择了GIS开发&#xf…

hcip—VLAN实验

目录 实验拓扑&#xff1a; 实验目的&#xff1a; 实验思路&#xff1a; 实验步骤&#xff1a; 1.创建VLAN 2.将接口放进相应VLAN当中&#xff0c;并配置接口类型&#xff08;hybrid口配置撕tag表&#xff09; 3.配置路由器接口 4.配置DHCP服务 pc1 ping pc4的过程分析…

position: absolute对el-dialog的影响

当用到position: absolute,会使元素脱离文档流,从而对原始层级发生变化,导致蒙层无法消失.

dubbo复习: (5)和springboot集成时的标签路由

标签路由&#xff1a;服务提供者和服务消费者都可以指定标签。 只有服务提供者的标签和服务消费者的标签一致时&#xff0c;才会进行请求路由。 给服务提供者指定标签有两种方式&#xff0c;一种是通过在DubboService注解的tag属性来指定&#xff0c;如下示例 package cn.edu…

VScode C/C++环境安装配置

1. 编译器需要从如下网站下载&#xff1a; MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net 2. 切换到file选项&#xff0c;下拉找到对应的文件版本直接下载&#xff1a; 3. 右键解压到当前文件夹如下&#xff1a; 4. 如图所示复制浏览器上的相应的…

LabVIEW2022安装教程指南【附安装包】

文章目录 前言一、安装指南1、软件包获取 二、安装步骤总结 前言 LabVIEW是一种程序开发环境&#xff0c;提供一种图形化编程方法&#xff0c;可可视化应用程序的各个方面&#xff0c;包括硬件配置、测量数据和调试&#xff0c;同时可以通过FPGA数学和分析选板中的NI浮点库链接…

XV4001KD汽车级应用的数字输出陀螺传感器

XV4001KD是一款专为汽车导航系统和远程信息处理而设计的数字输出陀螺传感器。采用SPI/I2C串行接口&#xff0c;具有高精度的16位的角速率输出和11位的温度输出功能&#xff0c;能够准确地测量车辆的运动状态和环境温度&#xff0c;为导航系统和信息处理提供可靠的数据支持。以及…

动态IP与静态IP有什么区别?如何选择?

动态IP和静态IP都是指网络设备&#xff08;如计算机、服务器、路由器等&#xff09;在互联网上分配的IP地址的类型。 一、什么是动态IP&#xff0c;什么是静态IP&#xff1f; 1、什么是动态IP&#xff1f; 动态IP是指由Internet服务提供商&#xff08;ISP&#xff09;动态分配…

C++的数据结构(十七):哈希表

哈希表&#xff0c;又称散列表&#xff0c;是一种根据关键码值&#xff08;Key value&#xff09;直接访问的数据结构。通过把关键码值映射到表中的位置&#xff0c;可以快速找到对应的数据&#xff0c;从而大大提高查找效率。这种映射关系是通过散列函数来实现的&#xff0c;散…

大语言模型本地部署与使用_ollama_open-webui

概述 本文主要记录如何使用ollama运行开源的大语言模型如llama3等&#xff0c;以及如何使用open-webui进行交互。 ollama支持MacOS、Linux、Windows等操作系统&#xff0c;这里主要以Linux和Windows为主&#xff0c;讲述如何在本地运行大语言模型。 一 安装ollama 1.1 Wind…

一张图看懂大模型性价比:能力、价格、并发量全面PK

最近&#xff0c;国内云厂商的大模型掀起一场降价风暴。火山引擎、阿里云、百度云等纷纷宣布降价&#xff0c;部分模型价格降幅据称高达99%&#xff0c;甚至还有些模型直接免费。 五花八门的降价话术&#xff0c;一眼望去遍地黄金。但事实真的如此吗&#xff1f;今天我们就拨开…

太阳诱电:顺应时代需求的新型电容器为何能在全球得到广泛应用(下)

随着汽车电动化和电子控制化的进展&#xff0c;车载计算机和电气部件也在逐渐向大功率化的方向发展。而构成这些车载设备电源电路的电子元器件也必须随之进行技术革新。太阳诱电集团携手全资子公司ELNA&#xff0c;开发并供应新型电容器“导电性高分子混合铝电解电容器”&#…

热爱无解 少年万丈光芒!首席艺人【彭禹锦】登陆第八季完美童模全球赛

2024年7月&#xff0c;一档由IPA模特委员会创办于2017年的王牌少儿模特大赛即将拉开全球总决赛的帷幕!作为家喻户晓的国民赛事——完美童模曾6季荣获CCTV央视新闻报道&#xff0c;以创意引领、美学引领、和兼具文化底蕴的赛事特色&#xff0c;收获了全球百万亲子家庭的喜爱。20…

工业镜头的参数、选型步骤

目录 一、如何选择合适的工业镜头 1. 工业镜头的基本参数 2. 选择工业镜头的步骤 3. 案例分析&#xff1a;如何选择合适的镜头 4. 远心镜头的设计目的 二、 介绍远心镜头 2.1 远心镜头的主要特性 2.2 远心镜头的类型 2.3 远心镜头的应用 2.4 远心镜头的工作原理 2.5 …

SOA半导体光放大器及其应用

---翻译自Michael Connelly于2015年发表的文章 1.简介 在过去的二十五年里&#xff0c;光纤通信网络的部署和容量迅速增长。这种增长得益于新光电技术的发展&#xff0c;这些技术可用于利用光纤的巨大带宽。如今&#xff0c;运行的系统比特率已超过 100 Gb/s。光技术是全球信…