首页 > 数据库 >SparkSQL练习:对学生选课成绩进行分析计算

SparkSQL练习:对学生选课成绩进行分析计算

时间:2024-09-10 16:51:55浏览次数:1  
标签:name val 选课 df 练习 course SparkSQL println groupBy

题目内容:
对学生选课成绩进行分析计算


题目要求:
(1)该系总共有多少学生;
(2)该系共开设来多少门课程;
(3)每个学生的总成绩多少;
(4)每门课程选修的同学人数;
(5)每位同学选修的课程门数;
(6)该系DataBase课程共有多少人选修;
(7)每位同学平均成绩;


数据预览:
每行数据包括以下三部分内容:学生姓名,所学课程,成绩
每项数据以“,”分隔开


代码实现:

def main(args: Array[String]): Unit = {
  val sparConf = new SparkConf().setMaster("local").setAppName("WordCount")
  val sc = new SparkContext(sparConf) //建立Spark连接
  val spark = SparkSession.builder().getOrCreate()
  val df = spark.read.option("header", "true").csv("E:\\ShuJu\\sparkinput\\batch_test_score\\Data01.csv") //读入文件

  df.show()

  println("(1)该系总共有多少学生")
  val StudentNum = df.groupBy("name").count().collect().length
  println(StudentNum)

  println("(2)该系共开设来多少门课程")
  val CourseNum = df.groupBy("course").count().collect().length
  println(CourseNum)

  println("(3)每个学生的总成绩多少")
  df.select("name", "grade").groupBy("name").agg(sum("grade")).show()

  println("(4)每门课程选修的同学人数")
  df.groupBy("course").count().show()

  println("(5)每位同学选修的课程门数")
  df.select("name", "course").groupBy("name").count().show()

  println("(6)该系DataBase课程共有多少人选修")
  df.select("name", "course").groupBy("course").count().filter("course = 'DataBase'").show()

  println("(7)每位同学平均成绩")
  val grades = df.groupBy("name").agg(sum("grade").alias("总成绩"), count("course").alias("科目数量"))
  val avgGrade = grades.withColumn("平均成绩", grades("总成绩") / grades("科目数量"))
  avgGrade.select(avgGrade("name"), round(avgGrade("平均成绩"), 2).alias("平均成绩")).show()

  sc.stop()
}

标签:name,val,选课,df,练习,course,SparkSQL,println,groupBy
From: https://www.cnblogs.com/h4o3/p/18406703

相关文章

  • 题单5:基础练习(rating1200)
    提醒对于下述语句,返回的是1(True)/0(False),即:条件语句的真假,而非后面的值之一。std::cout<<(a<b)?"Awin":"Bwin";如果需要返回值,则需要用括号包含整个条件运算符std::cout<<((a<b)?"Awin":"Bwin");题单492B.VanyaandLanterns......
  • Javaweb-JDBC练习
    packagePRACTICE;importDUIXIANG.Brand;importcom.alibaba.druid.pool.DruidDataSourceFactory;importjavax.sql.DataSource;importjava.io.FileInputStream;importjava.sql.*;importjava.util.ArrayList;importjava.util.List;importjava.util.Properties;......
  • 指针T_T 练习
    用变量a给出下面的定义(3C科技、宇视科技,神思电子,中安云科,北京凝思软件)a)一个整型数:inta;b)一个指向整型数的指针:int*a=NULLc)一个指向指针的的指针,它指向的指针是指向一个整型数: int**a=NULLd)一个有10个整型数的数组:inta[10]={0};e)一个指向有10个整型......
  • C语言阶段练习题
    题目一:(25分)题目描述:输入终值,输出所有能被7整除的数值及其和数据展示: 代码展示:#include<stdio.h>#include<string.h>#include<stdlib.h>intmain(intargc,constchar*argv[]){inta,sum=0,m=0;         //定义输入值,求和值,以及判断换......
  • 字符数组练习
    下列对C语言字符数组的描述中错误的是()(鲁科安全)A.字符数组可以存放字符串B.字符数组中的字符串可以整体输入、输出C.不可以用关系运算符对字符数组中的字符串进行比较D.可以在赋值语句中通过赋值运算符"="对字符数组整体赋值分析:字符数组不能通过赋值运算符......
  • C10-04-1-历史漏洞环境搭建和练习
    一、TomcatPUT方法任意写文件漏洞(CVE-2017-12615)1.1漏洞原理ApacheTomcat7.0.0版本至7.0.79版本存在远程代码执行漏洞。当上述版本的Tomcat启用HTTPPUT请求方法时,远程攻击者可以构造恶意请求利用该漏洞向服务器上传包含任意代码执行的jsp文件,并被服务器执行该文件,导致......
  • 练习 day2
    name=input('输入姓名')ifname=='kk':print('hellokk')ifname=='k':print('hik')name=input('输入姓名')ifname=='kk':print('hellokk')else:print('fxxk')gif......
  • C语言程序设计-练习篇
    不知道结果仍义无反顾地才是勇士。三,打印整数二进制的奇数位和偶数位题目内容:获取一个整数二进制序列中所有的奇数位和偶数位,分别打印出二进制序列#include<stdio.h>//打印整数二进制的奇数位和偶数位intmain(){ inti=0; intnum=0; scanf("%d",&num); //......
  • 题单3:基础练习(rating1000)
    题单1A:TheatreSquare数学问题118A:StringTask字符串处理。在体量较小的情况下,用多个cout语句打印可以节省代码时间。倘若体量较大,一般需要用char[]先存储需要打印的内容,最后再一次性打印。本题属于前者。58A:Chatroom字符串处理。可以事先存储需要匹配的序列char[6]......
  • 题单2:基础练习
    小技巧int型整数所能表示的范围较少,因此当需要精确的表示大数时,建议使用longlongint为便于使用,可以采用宏定义#defineINTlonglongint更好的做法是使用cstdint库中的int64_t类型#include<cstdint>int64_tmyVariable=1234567890123456789LL;题单96A:Football......