sparkSQL练习
1.前期准备
(1)建议先把这两篇文章都看一下吧,然后把这个项目也搞下来

(2)看看这个任务

(3)score.txt
student_id,course_code,score
108,3-105,99
105,3-105,88
107,3-105,77
105,3-245,87
108,3-245,89
107,3-245,82
106,3-245,74
107,6-101,75
108,6-101,82
106,6-101,65
109,6-102,99
101,6-102,79
105,9-106,81
106,9-106,97
107,9-106,65
108,9-106,100
109,9-106,82
105,6-102,85
(4)student.txt
student_id,student_name,gender,birthday,class_id
108,ZhangSan,male,1995/9/1,95033
105,KangWeiWei,female,1996/6/1,95031
107,GuiGui,male,1992/5/5,95033
101,WangFeng,male,1993/8/8,95031
106,LiuBing,female,1996/5/20,95033
109,DuBingYan,male,1995/5/21,95031
(5)teacher.txt
teacher_id,teacher_name,gender,birthday,title,department
825,LinYu,male,1958/1/1,Associate professor,department of computer
804,DuMei,female,1962/1/1,Assistant professor,computer science department
888,RenLi,male,1972/5/1,Lecturer,department of electronic engneering
852,GongMOMO,female,1986/1/5,Associate professor,computer science department
864,DuanMu,male,1985/6/1,Assistant professor,department of computer
(6)course.txt
course_code,course_name,teacher_id
3-105,Introduction to computer,825
3-245,The operating system,804
6-101,Spark SQL,888
6-102,Spark,852
9-106,Scala,864
(7)代码准备
创建文件名为task7.scala
代码为
package com.itheimaimport org.apache.spark.sql.SparkSession//spark-sql
object task7 {def main(args: Array[String]): Unit = {// 创建SparkSessionval spark = SparkSession.builder.appName("task7").master("local").getOrCreate()var teacher_path="src\\main\\resources\\teacher.txt"var teacher_df=spark.read.options(Map("sep"->",", "header"->"true")).csv(teacher_path)var student_path = "src\\main\\resources\\student.txt"var student_df = spark.read.options(Map("sep" -> ",", "header" -> "true")).csv(student_path)var score_path = "src\\main\\resources\\score.txt"var score_df = spark.read.options(Map("sep" -> ",", "header" -> "true")).csv(score_path)var course_path = "src\\main\\resources\\course.txt"var course_df = spark.read.options(Map("sep" -> ",", "header" -> "true")).csv(course_path)spark.stop()}}
2.任务实现
(1)按照班级降序排序显示所有学生信息
代码1
student_df.sort(student_df("class_id").desc).show()
截图1

(2)查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof
代码1
var tdepartment=teacher_df("department")teacher_df.filter(tdepartment.contains("electronic")||tdepartment.contains("computer")).select("teacher_name","title").show()
截图1

(3)显示student表中记录数
代码1
println(student_df.count())
截图1

(4)显示性别为男的教师信息
代码1
var tsex=teacher_df("gender")teacher_df.filter(tsex==="male").show()
截图1

(5)显示不重复的教师部门信息
代码1
teacher_df.select("department").distinct().show()
截图1

(6)显示学号为101的学生信息
代码1
var stu_id=student_df("student_id")student_df.filter(stu_id===101).show()
截图1

(7)将教师信息以List的形式显示
代码1
teacher_df.collect().toList.foreach(println)
截图1

(8)查询所有“女”教师和“女”同学的name、sex和birthday
代码1
//lit 函数用于创建一个字面量(常量)列//col 函数用于引用 DataFrame 中的列var t_res=teacher_df.filter(col("gender")==="female").select(col("teacher_name").as("name"),col("gender"),col("birthday"),lit("teacher").as("type"))var stu_res = student_df.filter(col("gender") === "female").select(col("student_name").as("name"),col("gender"), col("birthday"),lit("student").as("type"))t_res.union(stu_res).show()
截图1

3.补充笔记
(1)这两个上课时老师没有讲到,但是有用
导入这些库,才能使用这些函数
import org.apache.spark.sql.functions.col import org.apache.spark.sql.functions.lit
//lit 函数用于创建一个字面量(常量)列 //col 函数用于引用 DataFrame 中的列
(2)导入函数库要注意
在 Scala 语言中,_(下划线)是一个特殊的符号,具有多种用途。在 import 语句中,_ 用来表示“所有”,是一种通配符。
当你看到这样的导入语句:
scala复制
import org.apache.spark.sql.functions._
这里的 _ 表示导入 org.apache.spark.sql.functions 包中的所有公共成员(包括类、对象、函数等)。这样做的好处是可以让你在后续的代码中直接使用该包中的所有函数和类,而无需再次指定完整的包名。例如,你可以直接使用 col、lit 等函数,而不需要写成 org.apache.spark.sql.functions.col、org.apache.spark.sql.functions.lit。
不过,这种导入方式也有缺点,可能会导致命名冲突,特别是当你从多个包中导入所有成员时,如果有两个包中存在同名的成员,就会出现冲突。因此,在一些情况下,更推荐使用具体的导入方式,明确指定需要导入的成员,以避免潜在的冲突。
(3)有关这四个txt文件的注释如下
这4份数据分别代表了课程信息、学生成绩、学生信息和教师信息,下面分别进行解析:
课程信息
-
字段说明
-
course_code:课程代码,如“3-105”“3-245”等,是课程的唯一标识。 -
course_name:课程名称,如“Introduction to computer”“The operating system”等,表明课程的具体内容。 -
teacher_id:教师编号,如“825”“804”等,表示教授该课程的教师。
-
-
数据内容
-
共有5门课程,涵盖了计算机基础、操作系统、Spark相关知识以及Scala语言等领域,课程代码、名称和对应的教师编号一一对应。
-
学生成绩
-
字段说明
-
student_id:学生编号,如“108”“105”等,是学生的唯一标识。 -
course_code:课程代码,与课程信息表中的课程代码相对应,表示学生所选修的课程。 -
score:分数,如“99”“88”等,表示学生在该课程中的成绩。
-
-
数据内容
-
每位学生选修了不同数量的课程,如学生105选修了3门课程,学生107选修了3门课程等。不同学生在相同课程中的成绩有高有低,例如在“3-105”这门课中,学生108得了99分,学生105得了88分,学生107得了77分。
-
学生信息
-
字段说明
-
student_id:学生编号,与学生成绩表中的学生编号相对应。 -
student_name:学生姓名,如“ZhangSan”“KangWeiWei”等,表明学生的具体身份。 -
gender:性别,如“male”“female”,表示学生的性别。 -
birthday:生日,如“1995/9/1”“1996/6/1”等,记录学生的出生日期。 -
class_id:班级编号,如“95033”“95031”,表示学生所在的班级。
-
-
数据内容
-
共有6名学生,姓名、性别、生日和班级编号等信息齐全。从生日来看,学生年龄有大有小,如GuiGui生于1992年,而KangWeiWei生于1996年。从班级编号来看,学生分布在95031班和95033班两个班级。
-
教师信息
-
字段说明
-
teacher_id:教师编号,与课程信息表中的教师编号相对应。 -
teacher_name:教师姓名,如“LinYu”“DuMei”等,表明教师的具体身份。 -
gender:性别,如“male”“female”,表示教师的性别。 -
birthday:生日,如“1958/1/1”“1962/1/1”等,记录教师的出生日期。 -
title:职称,如“Associate professor”“Assistant professor”“Lecturer”,表示教师的专业技术职称。 -
department:系别,如“department of computer”“computer science department”“department of electronic engneering”,表示教师所在的系别。
-
-
数据内容
-
共有5名教师,姓名、性别、生日、职称和系别等信息完整。从职称来看,有副教授、助理教授和讲师等不同职称。从系别来看,教师分布在计算机系、计算机科学系和电子工程系等不同系别。
-
相关文章:
sparkSQL练习
1.前期准备 (1)建议先把这两篇文章都看一下吧,然后把这个项目也搞下来 (2)看看这个任务 (3)score.txt student_id,course_code,score 108,3-105,99 105,3-105,88 107,3-105,77 105,3-245,87 1…...
QT跨平台应用程序开发框架(2)—— 初识QT
目录 一,创建helloworld 1.1 通过图形化 1.2 通过代码 1.3 通过编辑框 1.4 使用按钮 二,对象树 2.1 关于对象树 2.2 演示释放流程 三,乱码问题 3.1 为什么会有乱码问题 3.2 解决乱码问题 四,认识Qt坐标系 五…...
[创业之路-248]:《华为流程变革:责权利梳理与流程体系建设》华为流程的前端拉动后端,与计算机软件的前端应用与后端程序的类比关系
华为的前端拉动后端模式与计算机前端应用与后端程序的类比关系,虽然两者属于不同的领域,但在某些方面存在有趣的相似性。以下是对这两者的类比关系的详细探讨: 一、华为的前端拉动后端模式 定义与特点: 华为的前端拉动后端模式是…...
汇总统计数据--SQL中聚集函数的使用
目录 1、为什么需要汇总数据 2、聚集函数 (1)AVG函数 (2)COUNT函数 (3)MAX和MIN函数 (4)SUM函数 3、聚集不同值--DISTINCT 4、组合聚集函数 5、小结 博主用的是mysql8 DBMS…...
【C盘清理】C盘清理工具、Unity缓存文件转移
链接: https://pan.baidu.com/s/1yE_7qF741o4NmBIsrd3XzA?pwdbwnn CCleaner 用于清理磁盘垃圾 勾选你要分析的选项,点击分析,分析完毕后,点击清理。 主要别清错东西了。(可以不要勾选网络缓存、网络记录相关的选项࿰…...
C# 迭代,递归,回调--13
目录 一.迭代 迭代器示例: 关键点: 优势: 二.递归 递归示例: 关键点: 优势: 注意: 三.回调 回调示例: 关键点: 优势: 应用场景: 4.三种模式的特点对比: 迭代: 递归: 回调: 一.迭代 在C#中迭代通常指重复执行一系列指令 在C#中,迭代器是一种特殊的结构,允许…...
海康大数据面试题及参考答案
请详细描述 YARN 提交程序的流程。 YARN(Yet Another Resource Negotiator)是一个资源管理系统,用于管理集群中的计算资源。以下是在 YARN 中提交程序的详细流程: 首先是客户端准备阶段。用户编写好应用程序,这个程序可以是 MapReduce、Spark 或者其他基于 YARN 的计算框架…...
软件测试 —— 自动化测试(Selenium)
软件测试 —— 自动化测试(Selenium) 什么是SeleniumPython安装Selenium1.安装webdirver-manager2.安装Selenium 写一个简单用例CSS_SELECTOR和XPATH浏览器快速定位页面元素浏览器的前进(forward),后退(bac…...
华为2024嵌入式研发面试题
01 你认为最好的排序算法是什么? 在实际的编程中,最好的排序算法要根据实际需求和数据规模来选择,因为每种排序算法都有其优势和劣势。以下是一些常见排序算法及其优缺点: 冒泡排序 冒泡排序是一种简单直观的排序算法࿰…...
centos 搭建nginx+配置域名+windows访问
准备工作:一个完整的centos环境,nginx安装包(可以从官网下载)nginx: download 一:centos可能有精简版,部分环境没有相关依赖包, 需要检查以下项: 1.gcc检查:gcc -v(回车后应当有版…...
APP推荐:全新TV端来了,8K原画电视版
▌ 软件介绍 B站都不陌生吧,一个能追番、学习、娱乐的多元平台,之前也分享过几款第三方TV端,其中的BV最近更新了全新版本。 使用了全新的UI界面,由之前的顶部菜单栏改成了侧边布局,已解锁限制&…...
【MySQL】索引(一)
索引 一、磁盘1、物理结构2、示意图3、定位扇区4、读写操作的基本方式 二、页1、介绍2、示例3、作用与结构4、类型(1)数据页(2)其他 5、组织与管理6、性能优化7、示意图(B树) 三、索引1、作用2、注意事项 四…...
ES6的高阶语法特性
一、模板字符串的高级用法 1.1.模板字符串的嵌套 模板字符串的嵌套允许在一个模板字符串内部再嵌入一个或多个模板字符串。这种嵌套结构在处理复杂数据结构或生成具有层级关系的文本时非常有用。 1. 嵌套示例 假设我们有一个包含多个对象的数组,每个对象都有名称、…...
GO:GO程序如何处理缓存加载和大数据缓存
如果我们会在程序启动时,需要加载所有数据,最简单的方式就是程序启动,通过轮训从数据库拉取所有数据,并写入到本地缓存中。 问题:数据量较大的时候,程序加载慢,启动时间长,遇到问题不…...
时序数据库TDengine 3.3.5.0 发布:高并发支持与增量备份功能引领新升级
近日,TDengine 3.3.5.0 版本正式发布,带来了多项重磅更新与优化,从功能拓展到性能提升,再到用户体验进行了全面改进。本次更新围绕用户核心需求展开,涵盖了开发工具、数据管理、安全性、可视化等多个层面,为…...
信息系统项目管理-采购管理-采购清单示例
序号类别产品/服务名称规格/功能描述数量备注1硬件服务器高性能处理器,大容量存储10HP、DELL2网络设备高速路由器和交换机10华为3工作站多核处理器,高分辨率显示器25国产设备4移动检查设备手持式移动检查仪,可连接云平台30国产设备5打印机和扫…...
python识别图片中指定颜色的图案并保存为图片
示例代码: def chuli(color):import cv2import numpy as np# 定义颜色名称到HSV阈值范围的映射color_thresholds {red: ([0, 100, 100], [10, 255, 255], [160, 100, 100], [180, 255, 255]),yellow: ([20, 100, 100], [30, 255, 255]),blue: ([90, 100, 100], [1…...
【git命令行】git pull冲突如何使用stash暂存,不提交当前工作的情况下临时保存修改
1、git add . 暂存区暂存 2、git stash save "message" 保存当前工作目录的临时状态,并将其存储为一个新的stash 3 、git pull 重新拉取 4、**git stash pop**吐出之前暂存的改动,git stash clear 清空所有暂存...
浏览器输入http形式网址后自动跳转https解决方法
一、问题描述 使用浏览器 网上冲浪 时会遇到一个情况: 在浏览器中输入“http域名”后会自动变成“https 域名”的形式,此时“https 域名”的网站可能已停止对外提供服务了,这时会出现如下不友好的网页提示: 二、处理方法&#x…...
BertTokenizerFast 和 BertTokenizer 的区别
BertTokenizerFast 和 BertTokenizer 都是用于对文本进行标记化的工具,主要用于处理和输入文本数据以供 BERT 模型使用。它们都属于 HuggingFace 的 transformers 库。 主要区别 底层实现: BertTokenizer: 这是一个使用纯 Python 实现的标记器ÿ…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
如何通过git命令查看项目连接的仓库地址?
要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...
【Ftrace 专栏】Ftrace 参考博文
ftrace、perf、bcc、bpftrace、ply、simple_perf的使用Ftrace 基本用法Linux 利用 ftrace 分析内核调用如何利用ftrace精确跟踪特定进程调度信息使用 ftrace 进行追踪延迟Linux-培训笔记-ftracehttps://www.kernel.org/doc/html/v4.18/trace/events.htmlhttps://blog.csdn.net/…...
C++ 类基础:封装、继承、多态与多线程模板实现
前言 C 是一门强大的面向对象编程语言,而类(Class)作为其核心特性之一,是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性,包括封装、继承和多态,同时讨论类中的权限控制,并展示如何使用类…...
未授权访问事件频发,我们应当如何应对?
在当下,数据已成为企业和组织的核心资产,是推动业务发展、决策制定以及创新的关键驱动力。然而,未授权访问这一隐匿的安全威胁,正如同高悬的达摩克利斯之剑,时刻威胁着数据的安全,一旦触发,便可…...
