典型的列转行(sparkSQL)

数据

id,username,math,computer,english
1,huangbo,34,58,58
2,xuzheng,45,87,45
3,wangbaoqiang,76,34,89

编写 SQL,将其转换为下面这张表

id,username,course,score
1,huangbo,math,34
1,huangbo,computer,58
1,huangbo,english,58
2,xuzheng,math,45
2,xuzheng,computer,87
2,xuzheng,english,45
3,wangbaoqiang,math,76
3,wangbaoqiang,computer,34
3,wangbaoqiang,english,89

第一种写法 

基本步骤:

  • 写出各学科的科目以及对应的分数
  • 用union进行合并

SQL代码: 

    with t1 as(select id,username,'math' as subject,math score from zuoye3union select id,username,'computer' as subject,computer score from zuoye3unionselect id,username,'english' as subject,english score from zuoye3)select * from t1 order by id

sparkSQL代码:


import os
import refrom pyspark.sql import SparkSession"""
------------------------------------------Description : TODO:SourceFile : _04-zuoye1Author  : zxxDate  : 2024/11/4
-------------------------------------------
"""
# 查询每种爱好中年龄最大的人,如果有相同的年龄,并列显示。
if __name__ == '__main__':os.environ['JAVA_HOME'] = 'D:/bigdata/03-java/java-8/jdk'# 配置Hadoop的路径,就是前面解压的那个路径os.environ['HADOOP_HOME'] = 'D:/bigdata/04-Hadoop/hadoop/hadoop-3.3.1/hadoop-3.3.1'# 配置base环境Python解析器的路径os.environ['PYSPARK_PYTHON'] = 'D:/bigdata/22-spark/Miniconda3/python.exe'  # 配置base环境Python解析器的路径os.environ['PYSPARK_DRIVER_PYTHON'] = 'D:/bigdata/22-spark/Miniconda3/python.exe'spark = SparkSession.builder.master("local[2]").appName("zuoye3").config("spark.sql.shuffle.partitions", 2).getOrCreate()df = (spark.sparkContext.textFile("../../datas/zuoye2/zuoye3.txt").filter(lambda x:re.split(",",x)[0] !="id").map(lambda line: (re.split(",",line)[0],re.split(",",line)[1],re.split(",",line)[2],re.split(",",line)[3],re.split(",",line)[4])).toDF(["id","username","math","computer","english"]))df.createOrReplaceTempView("zuoye3")spark.sql("""with t1 as(select id,username,'math' as subject,math score from zuoye3union select id,username,'computer' as subject,computer score from zuoye3unionselect id,username,'english' as subject,english score from zuoye3)select * from t1 order by id""").show()# 关闭spark.stop()

运行结果:

第二种写法

基本步骤

  • 把学科名字和其对应分数拼接
  • 把所有拼接的结果拼成一个大的字符串,用炸裂函数炸开
  • 把学科名字和其对应分数拼接用split分割成两列

SQL代码

with t1 as(select id,username,concat_ws(',',concat('math:',math),concat('computer:',computer),concat('english:',english)) s from zuoye3),t2 as(select id,username,score from t1 lateral view explode(split(s,',')) t1 as score)select id,username,split(score,':')[0] subject,split(score,':')[1] score from t2

 sparkSQL代码


import os
import refrom pyspark.sql import SparkSession"""
------------------------------------------Description : TODO:SourceFile : _04-zuoye1Author  : zxxDate  : 2024/11/4
-------------------------------------------
"""
# 查询每种爱好中年龄最大的人,如果有相同的年龄,并列显示。
if __name__ == '__main__':os.environ['JAVA_HOME'] = 'D:/bigdata/03-java/java-8/jdk'# 配置Hadoop的路径,就是前面解压的那个路径os.environ['HADOOP_HOME'] = 'D:/bigdata/04-Hadoop/hadoop/hadoop-3.3.1/hadoop-3.3.1'# 配置base环境Python解析器的路径os.environ['PYSPARK_PYTHON'] = 'D:/bigdata/22-spark/Miniconda3/python.exe'  # 配置base环境Python解析器的路径os.environ['PYSPARK_DRIVER_PYTHON'] = 'D:/bigdata/22-spark/Miniconda3/python.exe'spark = SparkSession.builder.master("local[2]").appName("zuoye3").config("spark.sql.shuffle.partitions", 2).getOrCreate()df = (spark.sparkContext.textFile("../../datas/zuoye2/zuoye3.txt").filter(lambda x:re.split(",",x)[0] !="id").map(lambda line: (re.split(",",line)[0],re.split(",",line)[1],re.split(",",line)[2],re.split(",",line)[3],re.split(",",line)[4])).toDF(["id","username","math","computer","english"]))df.createOrReplaceTempView("zuoye3")spark.sql("""with t1 as(select id,username,concat_ws(',',concat('math:',math),concat('computer:',computer),concat('english:',english)) s from zuoye3),t2 as(select id,username,score from t1 lateral view explode(split(s,',')) t1 as score)select id,username,split(score,':')[0] subject,split(score,':')[1] score from t2""").show()# 关闭spark.stop()

运行结果

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

42python数据分析numpy基础之trace计算对角线元素的和

python的numpy库的trace()函数,计算对角线元素的和。 用法 numpy.trace(a, offset0, axis10, axis21, dtypeNone, outNone)描述 numpy.trace(a),返回数组a的对角线元素的和。 入参 a:必选,数组,列表,元…

信息安全工程师(68)可信计算技术与应用

前言 可信计算技术是一种计算机安全体系结构,旨在提高计算机系统在面临各种攻击和威胁时的安全性和保密性。 一、可信计算技术的定义与原理 可信计算技术通过包括硬件加密、受限访问以及计算机系统本身的完整性验证等技术手段,确保计算机系统在各种攻击和…

深度测评 ONLYOFFICE 文档 8.2 版本:革新与体验的双重提升

目录 深度测评 ONLYOFFICE 文档 8.2 版本:革新与体验的双重提升引言协作编辑功能的革新PDF 表单签名的创新界面设计的全面提升性能与稳定性的双重优化文档编辑器的新功能电子表格的强大新特性演示文稿的创意增强RTL 支持与本地化的关注更多实用改进用户体验的持续提…

CytoSPACE·单细胞与空间转录组的高精度对齐

CytoSPACE 是一种新型计算工具,用于将单细胞转录组分配到原位空间转录组学 (ST) 数据。该方法通过最短增强路径优化程序最小化基于相关性的成本函数来解决单细胞/点分配问题。 工作流程: 1. 应用现有的ST去卷积方法(如Spatial Seurat或RCTD&…

Matlab实现鲸鱼优化算法优化随机森林算法模型 (WOA-RF)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 鲸鱼优化算法(Whale Optimization Algorithm, WOA)是受座头鲸捕食行为启发而提出的一种新型元启发式优化算法。该算法通过模拟座头鲸围绕猎物的螺旋游动和缩小包围圈的方式,在…

Chrome 130 版本开发者工具(DevTools)更新内容

Chrome 130 版本开发者工具(DevTools)更新内容 一、网络(Network)面板更新 1. 重新定义网络过滤器 网络面板获新增了一些过滤条件,这些过滤条件是根据反馈重新设计的,特定于类型的过滤条件保持不变&…

扑克牌[CSP-J 2024]

题目传送 可以用map做成一个桶&#xff0c;它的size就是输入的种数&#xff0c;再用52-size就好了。 代码如下&#xff1a; #include<iostream> #include<map> using namespace std; typedef long long ll; int main() {map<string,int> b;int n;cin>&g…

【Spring IoC】容器和IoC介绍以及IoC程序开发的优势

文章目录 Spring 是什么什么是容器什么是 IoCIoC 介绍传统程序开发解决方法IoC 程序开发IoC 的优势 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 https://www.captainbed.cn/yechiel 在…

stm32使用串口DMA实现数据的收发

前言 DMA的作用就是帮助CPU来传输数据&#xff0c;从而使CPU去完成更重要的任务&#xff0c;不浪费CPU的时间。 一、配置stm32cubeMX 这两个全添加上。参数配置一般默认即可 代码部分 只需要把上期文章里的HAL_UART_Transmit_IT(&huart2,DATE,2); 全都改为HAL_UART_Tra…

服务器数据恢复—RAID5阵列硬盘坏道掉线导致存储不可用的数据恢复案例

服务器存储数据恢复环境&#xff1a; 一台EqualLogic存储中有一组由16块SAS硬盘组建的RAID5阵列。上层划分了4个卷&#xff0c;采用VMFS文件系统&#xff0c;存放虚拟机文件。 服务器存储故障&#xff1a; 存储RAID5阵列中磁盘出现故障&#xff0c;有2块硬盘对应的指示灯亮黄灯…

深度学习之学习率

1 学习率 1.1 学习率的作用 ​ 在机器学习中&#xff0c;监督式学习通过定义一个模型&#xff0c;并根据训练集上的数据估计最优参数。梯度下降法是一个广泛被用来最小化模型误差的参数优化算法。梯度下降法通过多次迭代&#xff0c;并在每一步中最小化成本函数&#xff08;c…

HashMap 源码分析

HashMap 源码分析 1. 前置知识 1.1 什么是 Map 在实际需求中&#xff0c;我们常常会遇到这样的问题&#xff1a;在诸多数据中&#xff0c;通过其编号来寻找某些信息&#xff0c;从而进行查看或修改&#xff0c;例如通过学号查询学生信息。今天我们所介绍的 Map 集合就可以很…

Python毕业设计选题:基于django+vue的4S店客户管理系统

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 员工信息管理 个人中心 车辆信息管理 售后服务管理 售后安排管理 车辆信…

Vagrant使用教程:创建CentOS 8虚拟机

目录 简介准备工作下载配置Vagrant修改环境变量创建VAGRANT_HOME环境变量修改virturalBox新建虚拟机文件的默认生成路径修改Vagrant配置支持VirtualBox7.1.x版本创建Vagrant文件添加镜像 初始化并开机初始化开发环境开机 其他配置项宿主机的交换目录修改虚拟机内存修改 访问方式…

2024/11/4 数据结构大题打卡

邻接矩阵定义&#xff1a; typedef struct{char vex[N];int weight[N][N];int vexnum,arcnum; }MGraph; 邻接链表定义&#xff1a; #difine N 8typedef struct ArcNode{int vexIndex;int weight;struct ArcNode *next; }ArcNode; typedef struct VNode{char data;ArcNode *…

能详细的说明单片机的原理及其设计方法吗?如何快速的学会单片机这门技术?

单片机&#xff08;Microcontroller Unit&#xff0c;简称 MCU&#xff09;是一种将中央处理器&#xff08;CPU&#xff09;、存储器、输入输出接口等集成在一块芯片上的微型计算机系统。 **单片机的工作原理**&#xff1a; 单片机通过内部的时钟信号来同步各个部件的工作。程…

第一篇 硬件篇1[学习-来自 正点原子]

在电路设计中&#xff0c;TVS&#xff08;瞬态电压抑制器&#xff09;是一种有效的保护元件&#xff0c;可以用来防止瞬时过电压对芯片和其他敏感器件造成损坏。 STM32F103RCT6作为MCU 一键下载电路的具体实现过程&#xff1a; 首先&#xff0c; mcuisp控制 DTR输出低电平&…

最基础版编译运行Java(纯小白)

流程图&#xff1a; ⚠ 需要先安装JDK (Java Development Kit) 1. 写文件 首先写好自己的“文件”&#xff0c;可以用Sublime Text等文本编辑器写&#xff0c;还可以直接新建文本文档写一个.txt文件。 以编写一个HelloWorld程序为例&#xff1a; public class HelloWorld{p…

k8s 上如何跑 Dolphins 模型

接着上一篇的介绍&#xff0c;这一篇就来跑跑 Dolphins 模型&#xff0c;本篇会记录&#xff0c;跑模型常见的阬点。 1 在 k8s 上创建 pod 将外部数据挂载在 pod 里&#xff0c;并申请 gpu 资源。同时修改代码里对应的引入数据的路径 # dolphins.yaml apiVersion: v1 kind: …

大数据-206 数据挖掘 机器学习理论 - 多元线性回归 回归算法实现 算法评估指标

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…