Spark SQL概述、数据帧与数据集
文章目录
- 一、准备工作
- 1、准备数据文件
- 2、启动Spark Shell
- 二、加载数据为Dataset
- 1、读文件得数据集
- 三、给数据集添加元数据信息
- 1、定义学生样例类
- 2、导入隐式转换
- 3、将数据集转换成学生数据集
- 4、对学生数据集进行操作
- (1)显示数据集内容
- (2)打印数据集模式
- (3)对数据集进行投影操作
- (4)对数据集进行过滤操作
- (5)对数据集进行统计操作
- (6)对数据集进行排序操作
- (7)重命名数据集字段
- 四、将数据集转为数据帧
- 1、将数据集转为数据帧
- 2、对学生数据帧进行操作
- (1)显示数据帧内容
- (2)显示数据帧模式信息
- (3)对数据帧进行投影操作
- (4)对数据帧进行过滤操作
- (5)对数据帧进行统计操作
- (6)对数据帧进行排序操作
- (7)重命名数据帧字段
- 五、基于数据帧进行SQL查询
- 1、基于数据帧创建临时视图
- 2、使用spark对象执行SQL查询
- (1)查询全部表记录
- (2)显示数据表结构
- (3)对表进行投影操作
- (4)对表进行选择操作
- (5)对表进行统计操作
- (6)对表进行排序操作
- (7)重命名数据表字段
一、准备工作
1、准备数据文件
1,郑秀芸,女,20
2,王志峰,男,18
3,陈燕文,女,21
4,郑国栋,男,19
5,肖雨涵,男,20
- 在/home目录里创建student.txt文件
cd /home
vim student.txt
- 将student.txt上传到HDFS的/student/input目录
hdfs dfs -mkdir -p /student/input
hdfs dfs -put student.txt /student/input
2、启动Spark Shell
- 启动Spark Shell,执行命令:
spark-shell --master spark://master:7077

二、加载数据为Dataset
1、读文件得数据集
- 调用SparkSession对象的read.textFile()可以读取指定路径中的文件内容,并加载为一个Dataset
- 执行命令:
val ds = spark.read.textFile("hdfs://master:9000/student/input/student.txt")

三、给数据集添加元数据信息
1、定义学生样例类
- 定义一个样例类Student,用于存放数据描述信息(Schema)
- 执行命令:
case class Student(id: Int, name: String, gender: String, age: Int)

2、导入隐式转换
- 执行命令:
import spark.implicits._(_表示implicits包里所有的类,类似于Java里的*)

3、将数据集转换成学生数据集
- 执行命令:paste进入粘贴模式,然后执行如下命令
val studentDS = ds.map(line => {val fields = line.split(",")val id = fields(0).toIntval name = fields(1)val gender = fields(2)val age = fields(3).toIntStudent(id, name, gender, age)}
)

4、对学生数据集进行操作
(1)显示数据集内容
- 执行命令:
studentDS.show

(2)打印数据集模式
- 执行命令:
studentDS.printSchema

(3)对数据集进行投影操作
- 显示学生的姓名和年龄字段,执行命令:
studentDS.select("name", "age").show

- 对应的SQL语句:
select name, age from student
(4)对数据集进行过滤操作
- 显示女生记录,执行命令:
studentDS.filter("gender == '女'").show

- 显示年龄在[19, 20]之间的记录
- 执行命令:
val ds1 = studentDS.filter("age >= 19")


- 两个数据集求交集

- 可以有更简单的处理方式,执行命令:
studentDS.filter("age >= 19 and age <= 20").show

(5)对数据集进行统计操作
- 求20岁以上的女生人数

- 分组统计男女生总年龄,执行命令:
studentDS.groupBy("gender").sum("age").show

- 分组统计男女生平均年龄:执行命令:
studentDS.groupBy("gender").sum("age").show

- 分组统计男女生最大年龄,执行命令:
studentDS.groupBy("gender").max("age").show

- 分组统计男女生最小年龄,执行命令:
studentDS.groupBy("gender").min("age").show

(6)对数据集进行排序操作
- 按年龄升序排列,执行命令:
studentDS.sort("age").show()

- 按年龄降序排列,执行命令:
studentDS.sort(studentDS("age").desc).show

- 先按性别升序排列,再按年龄降序排列,执行命令:
studentDS.sort(studentDS("gender"), studentDS("age").desc).show()

- 对应的SQL语句:
select * from student order by gender, age desc;
(7)重命名数据集字段
- 执行命令:
studentDS.select(studentDS("id").as("学号"), studentDS("name").as("姓名"), studentDS("gender").as("性别"), studentDS("age").as("年龄")).show

四、将数据集转为数据帧
1、将数据集转为数据帧
- 将学生数据集转为学生数据帧,执行命令:
val studentDF = studentDS.toDF()

2、对学生数据帧进行操作
(1)显示数据帧内容
- 显示学生数据帧内容,执行命令:
studentDF.show

(2)显示数据帧模式信息
- 打印学生数据帧模式信息,执行命令:
studentDF.printSchema

(3)对数据帧进行投影操作
- 显示学生数据帧姓名与年龄字段,年龄加1,执行命令:
studentDF.select(studentDF("name"), studentDF("age") + 1).show

(4)对数据帧进行过滤操作
- 查询年龄在19岁以上的记录,执行命令:
studentDF.filter(studentDF("age") > 19).show

- 查询20岁以上的女生记录,执行命令:
studentDF.filter("age > 20 and gender == '女'").show()

(5)对数据帧进行统计操作
- 统计学生数据帧总记录数,执行命令:
studentDF.count

- 分组统计男女生总年龄,执行命令:
studentDF.groupBy("gender").sum("age").show

- 分组统计男女生平均年龄,执行命令:
studentDF.groupBy("gender").avg("age").show

- 分组统计男女生最大年龄,执行命令:
studentDF.groupBy("gender").max("age").show

- 分组统计男女生最小年龄,执行命令:
studentDF.groupBy("gender").min("age").show

- 分组统计男女生人数,执行命令:
studentDF.groupBy("gender").count.show

(6)对数据帧进行排序操作
- 对年龄升序排列,执行命令:
studentDF.sort("age").show

- 对年龄降序排列,执行命令:
studentDF.sort(studentDF("age").desc).show

- 先按性别升序,再按年龄降序,- 执行命令:
studentDF.sort(studentDF("gender"), studentDF("age").desc).show

(7)重命名数据帧字段
- 执行命令:
studentDF.select(studentDF("id").as("学号"), studentDF("name").as("姓名"), studentDF("gender").as("性别"), studentDF("age").as("年龄")).show

五、基于数据帧进行SQL查询
1、基于数据帧创建临时视图
- 执行命令:
studentDF.createOrReplaceTempView("student")

2、使用spark对象执行SQL查询
(1)查询全部表记录
- 执行命令:
spark.sql("select * from student").show

(2)显示数据表结构
- 执行命令:
spark.sql("describe student").show

(3)对表进行投影操作
- 执行命令:
spark.sql("select name, age + 1 from student").show

(4)对表进行选择操作
- 查询年龄在19岁以上的记录,执行命令:
spark.sql("select * from student where age > 19").show

- 查询20岁以上的女生记录,执行命令:
spark.sql("select * from student where age > 20 and gender = '女'").show()

(5)对表进行统计操作
- 查询学生表总记录数,执行命令:
spark.sql("select count(*) count from student").show

- 分组统计男女生总年龄,执行命令:
spark.sql("select gender, sum(age) from student group by gender").show

- 分组统计男女生平均年龄,执行命令:
spark.sql("select gender, avg(age) from student group by gender").show

- 分组统计男女生最大年龄,执行命令:
spark.sql("select gender, max(age) from student group by gender").show

- 分组统计男女生最小年龄,执行命令:
spark.sql("select gender, min(age) from student group by gender").show

- 分组统计男女生人数,执行命令:
spark.sql("select gender, count(*) count from student group by gender").show

(6)对表进行排序操作
- 按年龄升序排列,执行命令:
spark.sql("select * from student order by age").show

- 按年龄降序排列,执行命令:
spark.sql("select * from student order by age desc").show

- 先按性别升序,再按年龄降序,执行命令:
spark.sql("select * from student order by gender asc, age desc").show

(7)重命名数据表字段
- 执行命令:
spark.sql("select id stu_id, name stu_name, gender stu_gender, age stu_age from student").show()

相关文章:
Spark SQL概述、数据帧与数据集
文章目录 一、准备工作1、准备数据文件2、启动Spark Shell 二、加载数据为Dataset1、读文件得数据集 三、给数据集添加元数据信息1、定义学生样例类2、导入隐式转换3、将数据集转换成学生数据集4、对学生数据集进行操作(1)显示数据集内容(2&a…...
c# cad 二次开发 类库 CAD表格的操作,给CAD添加一个表格
c# cad 二次开发 类库 CAD表格的操作,给CAD添加一个表格 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.Colors; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; using A…...
单点登录的两种实现方式,分别有啥优缺点?
单点登录(Single Sign-On,简称SSO)是指在多个应用系统中,用户只需要登录一次,就可以访问所有已授权的系统资源的一种身份认证技术。SSO可以提升用户体验,减少用户密码管理工作量,并加强安全管理…...
opencv_c++学习(二十七)
一、单目相机模型 上图为针孔相机成像原理,蓝色坐标中的O即为镜头光心。成像原理与小孔成像相同。 单目相机映射关系如下: 将上式进行变换,就可以从三位空间映射到2维平面的公式。 相机的畸变公式如下: 二、模型投影函数 vo…...
探查chatGPT插件:Outschool,resume,webhooks
引言 在我们的日常工作和学习中,插件扮演着重要的角色。它们可以帮助我们提高效率,简化复杂的任务。在这篇文章中,我将介绍三个非常有用的插件:Outschool,resume,和webhooks,并通过具体的例子来…...
【学习笔记】Unity基础(七)【uGUI基础、利用render Texture实现小地图功能】
目录 一 Canvas1.1 三种Render Space渲染空间 screen1.2 canvas scaler画布缩放器1.3sprite1.4 sprite packer1.5 unity目录1.6 RuleTile Tilemap1.7 sprite packer1.8 sorting layer 二 rect transform2.1 pivot 中轴 中心点2.2 anchor 锚点2.3 uGUI源代码 三 EventSystem3.1 …...
yolov5配置错误记录
这里是直接没有找到数据集,说明是路径错误。经过设置yaml后, # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] path: ../autodl-tmp/datasets/neu # dataset root dir tr…...
全平台数据 (数据库) 管理工具 DataCap 1.10.0 发布
当前版本涉及几个主要更新。 DataCap 已发布 发布版本发布时间1.10.02023-05-30 General 修复服务启动默认连接 mongo修复了 sql 模板的 h2 db update_time 和 create_time改进 H2 元数据管理获取类型改进 mysql 元数据管理获取类型固定元数据管理数据页默认为 1重构数据渲染…...
使用Mybatis接口开发
文章目录 目录 前言 公司项目用到了mybatis开发接口,虽然很简单,但是mybatis不是特别熟悉,这里学习一下 一、Mybatis接口绑定的两种方式 1.接口绑定实现方式 就是在接口的方法上加上Select,updateInsertDelete等注解 select注解介绍: 简便,能快速去操作sql,它只需要在mapper…...
数据采集技术的实现原理有哪些?
数据采集技术是指通过各种手段和技术手段,从互联网、移动设备、传感器等各种数据源中获取数据,并将其存储、处理和分析,以便为业务决策和应用提供支持。本文将介绍数据采集技术的实现原理,包括数据采集的基本流程、数据采集技术的…...
2023年数学建模随机森林:基于多个决策树的集成学习方法
2023年9月数学建模国赛期间提供ABCDE题思路加Matlab代码,专栏链接(赛前一个月恢复源码199,欢迎大家订阅):http://t.csdn.cn/Um9Zd 目录 目录 1. 什么是随机森林? 2. 随机森林的优缺点 3. 随机森林的构建过程...
OpenAI发布最新研究让大模型数学推理直接达到SOTA
🦉 AI新闻 🚀 OpenAI发布最新研究:基于过程奖励的监督方法,让大模型数学推理直接达到SOTA 摘要:OpenAI最新研究基于GPT-4微调,采用过程监督和结果监督两种监督方法,奖励每个正确推理步骤的过程…...
快速检测 GlassFish 任意文件读取漏洞的 Python 脚本
部分数据来源:ChatGPT 引言 当下,互联网安全问题正愈发严重,黑客利用各种漏洞进行攻击的频率也在持续增加。在2015年10月,一位名为“路人甲”的安全研究员在乌云上公开了一个名为“应用服务器glassfish存在通用任意文件读取漏洞”的漏洞(编号:wooyun-2010-0144595),该…...
Docker镜像更新通知器DIUN
什么是 DIUN ? Docker Image Update Notifier 是一个用 Go 编写的 CLI 应用程序,可作为单个可执行文件和 Docker 映像交付,用于当 Docker 映像在 Docker registry中更新时接收通知。 和老苏之前介绍过的 watchtower 不同,DIUN 只是通知&…...
插件框架PF4J-从理论到实践
PF4J:Plugin Framework for Java 目录 是什么? 不是什么? 特点 组件 主要类 流程概述 spring-pf4j 思考 功能模块化 我对pf4j的封装和使用demo GitHub - chlInGithub/pf4jDemo: pf4j demo 是什么? 开源轻量级的插件框架。通过插件…...
怎么将pdf文件免费转为扫描件
推荐两个工具,也算是给自己记一下 1、手机:扫描全能王APP 太好使了,可以直接拍照并转换为扫描件 不开会员的话会出现水印,因为我都是自己用或者交作业就没开 支持读取相册,一次一张、多张都可以 如果不想要水印也…...
vue+nodejs校园二手物品交易市场网站_xa1i4
。为满足如今日益复杂的管理需求,各类管理系统程序也在不断改进。本课题所设计的校园二手交易市场,使用vue框架,Mysql数据库、nodejs语言进行开发,它的优点代码不能从浏览器查看,保密性非常好,比其他的管理…...
Barra模型因子的构建及应用系列六之Book-to-Price因子
一、摘要 在前期的Barra模型系列文章中,我们构建了Size因子、Beta因子、Momentum因子、Residual Volatility因子和NonLinear Size因子,并分别创建了对应的单因子策略,其中Size因子和NonLinear Siz因子具有很强的收益能力。本节文章将在该系列…...
【c语言习题】使用链表解决约瑟夫问题
创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 🔥c语言系列专栏:c语言之路重点知识整合 &#x…...
JVM之类的初始化与类加载机制
类的初始化 clinit 初始化阶段就是执行类构造器方法clinit的过程。此方法不需定义,是javac编译器自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并而来。构造器方法中指令按语句在源文件中出现的顺序执行。clinit不同于类的构造器。(关联:…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
