前言

在MySQL和oracle中有列转行函数用于将列转成行。在大数据SQL中也有类似的操作。这里主要讲解Spark的列转行操作。

欢迎关注微信公众号:大数据报文

concat:多列合并

在介绍列转行之前首先要说一下concat函数,为后面列转行做一下铺垫:

 -- mysql:可以一到合并多个值,无法使用分隔符,如果合并的值中有null,则合并的结果为nullselect concat('11','22',null);--mysql:可以合并多个值,第一个参数是分隔符。如果有null则忽略null合并其他值select concat_ws(',','11','22',null);​--oracle:只能连接两个字符串,如果有一个是null,则结果是非null的值select concat('111',null) from dual;
Spark的concat函数:
 --spark sql:与mysql的规则相同orclDF.select(concat($"CERT_NO", lit(null))).show()

concat_ws:单列转行

RDBMS SQL

 -- mysql:有null值忽略,加distinct参数可以在列转行之前去重select name,group_concat(age) from student group by name;select name,group_concat(DISTINCT age) from student group by name;--去重select id,group_concat(name separator ';') from aa group by id;--以逗号分割select id,group_concat(name order by name desc) from aa group by id;--按合并字段排序​-- Oracle:合并多列默认以逗号分隔select ci_id,wm_concat(stu_name) nameslist from student group by ci_id;--将两列合并为一列再列转行select ci_id,wm_concat(stu_name || '-' || stu_age) nameslist from student group by ci_id;

Spark SQL

//spark sql:要稍微复杂一点,要使用多个函数配合
//首先分组以后,肯定是要用聚合函数的,sparksql列转行的算子叫concat_ws,第一个参数是分隔符,如果不需要刻意写空字符串,但是必须指定。第二个参数分组之后dept列的列表。如果是collect_set,表示集合,即后者表示对组内的值去重orclDF.select($"id", $"dept", $"dest").groupBy($"id").agg(concat_ws("&", collect_list("dept"))
//通过上面这种方式可以达到上面RDBMS SQL的效果,但是如果合并两列就有些麻烦了,他没有合适的连接符
//下面这种方式,先合并了col1,再合并col2,如果要(col1[1]+col2[1])(col1[2]+col2[2])去合并需要使用concat函数orclDF.select($"id", $"dept", $"dest").groupBy($"id").agg(concat_ws("&", collect_list("col1"),collect_list("col2"))    -- 下面这种方式是先将两列(应该说三列)合并为一列再列转行orclDF.select($"id", $"date", concat($"dept", lit("|"), $"dest").as("track")).groupBy($"id").agg(concat_ws(",", collect_list("track")).as("tracks"))
//上面也可以这样写
val testDF = orclDF.select($"id", $"name", $"score1", $"score2").groupBy($"id").agg(concat_ws(";", collect_list(concat($"score1",lit(","),$"score2"))).as("scores"))

总结

Spark SQL的列转行稍微有些复杂,但是逻辑很清晰,本质上还是与传统列转行一样,只是通过这种半编程方式实现起来相对而言稍显复杂。

另外最近复习Spark的一点感触。Spark SQL虽然不是传统sql,但是已经十分接近传统SQL的功能了,绝大多数传统SQL,Spark SQL都有实现。而且DataSet拥有类RDD编程的便利,可以说某些方面Spark SQL要比传统SQL灵活很多。

Spark 列转行操作相关推荐

  1. python列转行函数_Python pandas 列转行操作详解(类似hive中explode方法)

    最近在工作上用到Python的pandas库来处理excel文件,遇到列转行的问题.找了一番资料后成功了,记录一下. 1. 如果需要爆炸的只有一列: df=pd.DataFrame({'A':[1,2 ...

  2. 将Excel文件导入到MySQL数据库中并实现列转行操作

    在处理数据的时候,因为数据源在Excel文件中,本人Excel文件的处理方法不是太会,加上朋友说在Excel中处理这样的数据很麻烦,我就想着干脆导入到数据库中通过代码解决这个问题,感兴趣的可以找我拿数 ...

  3. SQL行转列,列转行

    我们都知道在sql查询中,union 是增行,join是增列,但是如果碰到需要行转列,列转行时,一味的使用 join来完成则会变的异常繁杂.如把一天24小时的行转换成列,则需要join24次,既不方便 ...

  4. MySQL数据库行转列,列转行

    一,MySQL行转列 导入数据表数据 CREATE TABLE `tb_student_grade` (`id` int(0) NOT NULL AUTO_INCREMENT,`s_name` var ...

  5. oracle系列–行转列、列转行

    oracle行转列.oracle列转行 以及 mysql列转行,mysql行转列 文章目录 前言 一.oracle:逗号分隔的一列转行 二.oracle:多列转行 unpivot 函数 三.oracl ...

  6. Spark Sql对列的操作

    SQL写得好,工作随便找 本篇博客讲的是关于Spark SQL中对于列的操作.在SQL中对列的操作有起别名,转化类型等在Spark SQL中同样也支持,下面来看一看把 Spark withColumn ...

  7. 张同学的 SQL中对材料报价单的数据权限进行操作 (如列转行 行转列的处理) 学习一下....

    SQL中对材料报价单的数据权限进行操作 (如列转行 行转列的处理) --可以直接放到查询分析器执行 --判断测试表TmpTCIQuote是否有存在 不存在则创建 if NOT exists (sele ...

  8. oracle+行换列,Oracle的数据表中行转列与列转行的操作实例讲解

    行转列一张表 查询结果为 --行转列 select years,(select amount from Tb_Amount as A where month=1 and A.years=Tb_Amou ...

  9. Python操作EXCEL列转行

    文章目录 前言 一.业务场景 二.使用步骤 1.引入库 2.读入数据 3.输出数据 总结 前言 一.业务场景 业务整理了工艺的模板需要导入到系统中,但是系统中的表结构是工序只有一个列,不同值按行分开, ...

最新文章

  1. dev c++ 最新版本5.0
  2. 使用dubbo需要导入的jar包
  3. Swift中的Sequence基本的使用
  4. python下载大文件mp4_Python 下载 m3u8 格式视频
  5. 目标检测——如何处理任意输入尺寸的图片
  6. java模板变量_IntelliJ IDEA实时模板变量
  7. grafana+zabbix 部署分布式监控系统
  8. 如何证明永动机不可能制造出来
  9. 大数据实效_新都区:运用“大数据”提升专项巡察实效
  10. 安卓抓包工具、方式选择
  11. 数据结构PTA 案例6-1.3 哥尼斯堡的“七桥问题”
  12. vbox虚拟机与主机互传文件的四种方法
  13. 万字总结,行业分析到底应该怎么做!
  14. 关于hping打流测试工具
  15. L2-3 清点代码库【STL】
  16. Linux常用命令一览表
  17. 为什么是百度先造出了“知识型网红”
  18. Centos7中设置代理的方法
  19. CUMT数据库SQL实验
  20. 杂项-Grunt:grunt build 打包和常见错误

热门文章

  1. Android根据图片路径获取图片名字
  2. error:jump to case label [-fpermissive]
  3. P5200 [USACO19JAN]Sleepy Cow Sorting
  4. 第四章 Caché 设计模式 代理模式
  5. 怎么查看一段时间的计算机ip,如何查看电脑中使用过的历史IP地址
  6. 3735平板装win和linux双系统,流行的就一定好?浅谈双系统平板的利与弊
  7. 09静态资源虚拟主机
  8. 个人网站搭建,个人网站需要什么软件
  9. 探秘varian:优雅的发布部署程序
  10. 与语音信号处理有关的java书籍_MATLAB在语音信号分析与合成中的应用 中文pdf扫描版[198MB]...