an. 2024-03-29 18:37 采纳率: 0%
浏览 38

scala问题,求解惑

“双减”政策落地后,为了体现“分数是一时之得,要从一生的长远目标来看”教育,某学校某班级经过期中考试后,该班级中每位同学的各科目考试成绩保存在一份文件 primary_midsemester.txt,文件共有5个数据字段,分别为学生学号(ID)、性别(gender)、语文成绩(Chinese)、英语成绩(English)、数学成绩(Math),部分数据如表2-8所示。

表2-8 某学校某班级的学生各科目考试成绩部分数据

ID gender Chinese English Math
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
为了分析各科目ls的教学质量,请使用 Scala 函数式编程分别统计各科目考试成绩的平均分、最低分和最高分。

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-29 18:38
    关注

    引自免费微信小程序:皆我百晓生

    在Spark DataFrame中,我们可以使用mapValues()函数和minBy()maxBy()等函数来实现对多个列进行计数统计和计算平均值、最低值和最高值的操作。以下是一个示例:

    import org.apache.spark.sql.functions._
    import org.apache.spark.sql.types._
    
    // 假设我们有一个名为"grades"的DataFrame,其中包含以下列:ID (String类型),Gender (String type),Chinese (Integer type), English (Integer type), Math (Integer type)
    val grades = Seq(
        ("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)
    )
    
    // 计算每个学生的总分
    val totalGrades = grades.mapValues(_.length).sum
    
    // 计算各科目的平均分
    val averageChinese = totalGrades / grades.count(_.contains("Chinese"))
    val averageEnglish = totalGrades / grades.count(_.contains("English"))
    val averageMath = totalGrades / grades.count(_.contains("Math"))
    
    // 计算各科目的最低分
    val minChinese = totalGrades.minBy(_.length)
    val minEnglish = totalGrades.minBy(_.contains("English"))
    val minMath = totalGrades.minBy(_.contains("Math"))
    
    // 计算各科目的最高分
    val maxChinese = totalGrades.maxBy(_.length)
    val maxEnglish = totalGrades.maxBy(_.contains("English"))
    val maxMath = totalGrades.maxBy(_.contains("Math"))
    
    // 打印结果
    println("Total scores:")
    println(totalGrades)
    println("\nAverage Chinese score:")
    println(averageChinese)
    println("\nAverage English score:")
    println(averageEnglish)
    println("\nAverage Math score:")
    println(averageMath)
    println("\nMin Chinese score:")
    println(minChinese)
    println("\nMin English score:")
    println(minEnglish)
    println("\nMin Math score:")
    println(minMath)
    println("\nMax Chinese score:")
    println(maxChinese)
    println("\nMax English score:")
    println(maxEnglish)
    println("\nMax Math score:")
    println(maxMath)
    

    这段代码首先使用mapValues()函数将每个学生的成绩转换为长度(即总分),然后使用sum()函数计算所有学生总分的总和。接下来,它通过遍历评分表中的每个成绩,使用minBy()maxBy()等函数计算对应的科目的平均分、最低分和最高分。最后,它打印出各个科目的总分、平均分、最低分和最高分,并显示了它们的最小值、最大值和各自对应的ID。

    注意:这个示例假设所有的成绩都是整数,且"gender"列对应的是学生是否为男生。如果你的数据格式不同,可能需要修改这些函数的输入和输出类型。例如,在某些情况下,可能需要处理非整数的学号或成绩,或者需要区分不同的性别类别。同样,由于"grades"表包含了大量的记录,你可能需要考虑并优化查询速度和空间需求,特别是在处理大量数据时。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 3月29日
  • 创建了问题 3月29日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见