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

import org.apache.spark.sql.SparkSession

//spark-sql
object task7 {
  def main(args: Array[String]): Unit = {
    // 创建SparkSession
    val 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 包中的所有公共成员(包括类、对象、函数等)。这样做的好处是可以让你在后续的代码中直接使用该包中的所有函数和类,而无需再次指定完整的包名。例如,你可以直接使用 collit 等函数,而不需要写成 org.apache.spark.sql.functions.colorg.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名教师,姓名、性别、生日、职称和系别等信息完整。从职称来看,有副教授、助理教授和讲师等不同职称。从系别来看,教师分布在计算机系、计算机科学系和电子工程系等不同系别。

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

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

相关文章

GIFT ICA 下载记录

1.帮助文档 Group ICA/IVA Of fMRI Toolbox;【GIFT介绍】 Group ICA of fMRI Toolbox (GIFT) Walk Through;【流程介绍】 GIFT v1.3c Functions Srinivas Rachakonda, Eric Egolf and Vince Calhoun【流程解释】 2.下载记录 从官网下载程序包&#xff0…

从零深度学习:(2)最小二乘法

今天我们从比较简单的线性回归开始讲起,还是一样我们先导入包 import numpy as np import torch import matplotlib as mpl import matplotlib.pyplot as plt a torch.arange(1,5).reshape(2,2).float() a 我们利用刚刚导入的画图的包将这两个点画出来&#xff0…

02JavaWeb——JavaScript-Vue(项目实战)

一、JavaScript html完成了架子,css做了美化,但是网页是死的,我们需要给他注入灵魂,所以接下来我们需要学习 JavaScript,这门语言会让我们的页面能够和用户进行交互。 1.1 介绍 通过JS/js效果演示提供资料进行效果演…

【Flink系列】5. DataStream API

5. DataStream API DataStream API是Flink的核心层API。一个Flink程序,其实就是对DataStream的各种转换。具体来说,代码基本上都由以下几部分构成: 5.1 执行环境(Execution Environment) Flink程序可以在各种上下文…

大模型高并发部署方案探究

版本 内容 姓名 时间 V1.0 新建 xx 2025-01-16 声明:只是进行探究,后续真正实践后,会更新新的内容 前置条件:70B的模型,并发要求200 性能测试参考链接 Benchmarking LLM Inference Backends :表明一台A100(8…

MIAOYUN信创云原生项目亮相西部“中试”生态对接活动

近日,以“构建‘中试’生态,赋能科技成果转化”为主题的“科创天府智汇蓉城”西部“中试”生态对接活动在成都高新区菁蓉汇隆重开幕。活动分为成果展览、“中试”生态主场以及成果路演洽谈对接三大板块。在成果展览环节,成都元来云志科技有限…

pytest-instafail:让测试失败信息即时反馈

pytest-instafail:让测试失败信息即时反馈 前言一、简介二、优势三、安装与使用3.1 未安装时运行情况3.2 安装3.3 已安装时运行情况3.3 pytest.ini 配置选项 四、对比 总结 前言 当测试用例数量庞大时,定位测试失败的原因往往耗时费力。此时,…

低代码平台:技术复杂性的系统简化

在传统开发模式下,应用构建需要经历需求分析、代码开发、测试部署等多环节,流程繁琐且耗时,往往成为企业技术创新的瓶颈。低代码平台通过模块化和自动化技术重新定义开发流程,使开发者能够在较短时间内实现复杂的应用功能&#xf…

精度论文:【Focaler-IoU: More Focused Intersection over Union Loss】

Focaler-IoU: 更聚焦的交并比损失 Focaler-IoU: More Focused Intersection over Union Loss Focaler-IoU: 更聚焦的交并比损失I. 引言II. 相关工作III. 方法IV. 实验V. 结论 原文地址:官方论文地址 代码地址:官方代码地址 摘要——边界框回归在目标检…

“AI智慧化服务系统:未来生活的智能管家

在当今快速发展的科技时代,人工智能(AI)正以前所未有的速度改变着我们的生活。AI智慧化服务系统作为这一变革的前沿技术,正在逐渐成为我们未来生活的智能管家。它们不仅提高了服务效率,还为我们带来了更加个性化和便捷…

nginx 修改内置 404 页面、点击劫持攻击。

1、在部署前端项目的目录下增加 404.html 页面:/opt/web/404.html。 2、在 nginx 配置中增加 404 配置: root /opt/web; # 设置根目录的配置error_page 404 404.html; location /404.html {root /opt/web;# 指定 404 页面所在的根目录internal;# 确保…

网络密集型应用的Linux网络缓冲区参数优化

一、网络IO密集型 1.哪些应用属于网络IO密集型应用 文件上传、下载服务器,实时大数据同步复制,Kafka巨量数据QPS生产消费环境,CDN等环境都是网络IO密集型的服务应用 2.知识来源 在《kafka权威指南2》书中环境搭建的网络小节写到了几个参数…

npm发布组件(vue3+webpack)

1.初始化Vue项目 vue create my-app 2.本地运行 npm run serve 3.新增目录和文件 1. src/package/index.js 2. src/package/wlz-btn/index.vue 3. src/package/wlz-input/index.vue // src\package\index.js import WlzBtn from "./wlz-btn"; import WlzInput …

Day05-后端Web基础——TomcatServletHTTP协议SpringBootWeb入门

目录 Web基础知识课程内容1. Tomcat1.1 简介1.2 基本使用1.2.1 下载1.2.2 安装与卸载1.2.3 启动与关闭1.2.4 常见问题 2. Servlet2.1 快速入门2.1.1 什么是Servlet2.1.2 入门程序2.1.3 注意事项 2.2 执行流程 3. HTTP协议3.1 HTTP-概述3.1.1 介绍3.1.2 特点 3.2 HTTP-请求协议3…

两级式三相光伏并网逆变器Matlab/Simulink仿真模型

忘记更新最经典的光伏并网仿真模型了,作为包含经典的MPPT和并网恒功率因素的双闭环控制模型,也是很多相关专业学生的入门研究内容,光伏并网模型三相的和单相都有。 其中三相光伏并网逆变器有大功率和小功率的两种,之前早在硕士期…

将图像输入批次扁平化为CNN

将图像输入批次扁平化为CNN 欢迎回到这个神经网络编程系列。在这篇文章中,我们将可视化一个单一灰度图像的张量扁平化操作,并且我们将展示如何扁平化特定的张量轴,这在使用CNN时通常是必需的,因为我们处理的是输入批次&#xff0…

Linux命令行工具-使用方法

参考资料 Linux网络命令:网络工具socat详解-CSDN博客 arm-linux-gnueabihf、aarch64-linux-gnu等ARM交叉编译GCC的区别_aarch64-elf-gcc aarch64-linux-gnu-CSDN博客 解决Linux内核问题实用技巧之-dev/mem的新玩法-腾讯云开发者社区-腾讯云 热爱学习地派大星-CS…

浅谈云计算20 | OpenStack管理模块(下)

OpenStack管理模块(下) 五、存储管理5.1 存储管理概述 5.2 架构设计5.2.1 Cinder块存储架构5.2.2 Swift对象存储架构 六、网络管理6.1 网络管理概述6.2 架构解析6.2.1 Neutron网络服务架构6.2.2 网络拓扑架构 6.3 原理与流程6.3.1 网络创建原理6.3.2 网络…

GPU 硬件原理架构(一)

这张费米管线架构图能看懂了,整个GPU的架构基本就熟了。市面上有很多GPU厂家,他们产品的架构各不相同,但是核心往往差不多,整明白一了个基本上就可以触类旁通了。下面这张图信息量很大,可以结合博客GPU 英伟达GPU架构回…

某国际大型超市电商销售数据分析和可视化

完整源码项目包获取→点击文章末尾名片! 本作品将从人、货、场三个维度,即客户维度、产品维度、区域维度(补充时间维度与其他维度)对某国际大型超市的销售情况进行数据分析和可视化报告展示,从而为该超市在弄清用户消费…