Spark中SQL列和并为一行
在使用数据库的时候,需要将查询出来的一列按照逗号合并成一行。
原表名字为 TABLE
,表中的部分原始数据为:
+---------+------------------------+
| BASIC | NAME |
+----------+------------------------+
| 1 | 有害程序事件(MI) |
| 0 | 计算机病毒事件 |
| 0 | 蠕虫事件 |
| 0 | 特洛伊木马事件 |
+----------+------------------------+
查询代码为:
select GROUP_CONCAT(NAME SEPARATOR ',') as NAME from TABLE where BASIC=0;
得到部分结果为:
+---------------------------------------------------------+
| NAME |
+---------------------------------------------------------+
| 计算机病毒事件,蠕虫事件,特洛伊木马事件 |
+---------------------------------------------------------+
但是在 spark
中没有 GROUP_CONCAT
命令,查找后发现命令 concat_ws
:
ResultDF.createOrReplaceTempView("BIGDATA")
val dataDF=spark.sql("select BASIC,concat_ws(',',collect_set(NAME)) as NAMES from BIGDATA group by BASIC")
得到结果:
+----------+------------------------------------------------+
| BASIC | NAMES |
+----------+------------------------------------------------+
| 1 | 有害程序事件(MI) |
| 0 | 计算机病毒事件,蠕虫事件,特洛伊木马事件 |
+----------+------------------------------------------------+
也可以用另一个方法:
import org.apache.spark.sql.functions._
ResultDF.groupBy("BASIC ")
.agg(collect_set("NAME"))
.show(10,false)
但是得到的结果为 List
:
+----------+------------------------------------------------+
| BASIC | NAMES |
+----------+------------------------------------------------+
| 1 | 有害程序事件(MI) |
| 0 | [计算机病毒事件,蠕虫事件,特洛伊木马事件] |
+----------+------------------------------------------------+
Spark中SQL列和并为一行的更多相关文章
- Spark(Hive) SQL中UDF的使用(Python)
相对于使用MapReduce或者Spark Application的方式进行数据分析,使用Hive SQL或Spark SQL能为我们省去不少的代码工作量,而Hive SQL或Spark SQL本身内 ...
- Spark(Hive) SQL中UDF的使用(Python)【转】
相对于使用MapReduce或者Spark Application的方式进行数据分析,使用Hive SQL或Spark SQL能为我们省去不少的代码工作量,而Hive SQL或Spark SQL本身内 ...
- 神奇的 SQL 之层级 → 为什么 GROUP BY 之后不能直接引用原表中的列
前言 开心一刻 感觉不妙呀,弟弟舔它! 不该舔的,舔到怀疑人生了...... GROUP BY 后 SELECT 列的限制 标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELECT 子句中写 ...
- [转]神奇的 SQL 之层级 → 为什么 GROUP BY 之后不能直接引用原表中的列
原文:https://www.cnblogs.com/youzhibing/p/11516154.html 这篇文章,对group by的讲解不错 -------------------------- ...
- 拆分Sql列中内容的拆分
拆分Sql列中内容的拆分. /*按照符号分割字符串*/ create function [dbo].[m_split](@c varchar(2000),@split varchar(2)) retu ...
- sql得到表中的列信息
取列全部用的 sys. 中的表 CTE:WITH name AS() 用法: sql树形查询 ①主键信息 SELECT ic.column_id, ic.index_column_id, ic.o ...
- Python:读取txt中按列分布的数据,并将结果保存在Excel文件中 && 保存每一行的元素为list
import xlwt import os def write_excel(words,filename): #写入Excel的函数,words是数据,filename是文件名 wb=xlwt.Wor ...
- 【SQL】Update中使用表别名、如何用表中一列值替换另一列的所有值
Update中使用表别名 select中的表别名: select * from TableA as ta update中的表别名: update ta from TableA as ta 如何用表中一 ...
- Spark(Hive) SQL数据类型使用详解(Python)
Spark SQL使用时需要有若干“表”的存在,这些“表”可以来自于Hive,也可以来自“临时表”.如果“表”来自于Hive,它的模式(列名.列类型等)在创建时已经确定,一般情况下我们直接通过Spar ...
随机推荐
- SQL查询时,根据日期范围查询周
周数据会有weekbegin和weekend两个字段,用来描述周的开始日期和结束日期. 现在项目中的日历控件不支持周查询,只支持日期查询,所以目前面临的问题是,根据时间范围,查询周. 最终sql如下: ...
- Quartz+JAVA+Servlet实现任务调度系统(简洁)
前言 该系统使用场景: 在12306上买了一张火车票,30分钟内需要支付(需要添加一个倒计时),30分钟还没有支付就请求取消订单的接口(自动根据url请求),如果支付了收到了支付的回调通知后,就删除计 ...
- [SCOI2015]国旗计划
Description: A 国正在开展一项伟大的计划 -- 国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了 \ ...
- 加固后,上传play store, 在 google play store 下载应用安装后,打开签名校验失败
在Google Play Console. (Google Play App Signing )签署您的应用 在创建应用时: 会有个“ Google Play App Signing” 的东西,提示使 ...
- layui select使用问题
1.需要引用form模板 layui.use(['form'], function () { var form = layui.form; }); 2.html代码 <div class=&qu ...
- 浅谈MVC模式与MVVM模式的区别
MVC模式: M:Model(数据模型),用于存放数据 V:View(视图),也就是用户界面 C:Controller是Model和View的协调者,Controller把Model中的数据拿过来给V ...
- js原型与继承
demofunction Fun(){} var foo = new Fun();foo.__proto__ === Fun.prototype 摘要 1.js本身不提供类实现,es6引入了class ...
- QEMU KVM Libvirt手册(11): Managing Storage
When managing a VM Guest on the VM Host Server itself, it is possible to access the complete file sy ...
- Lesson 27 A wet night
Text Late in the afternoon, the boys put up their tent in the middle of a feild. As soon as this was ...
- leetcode-查找和替换模式
一.题目描述 你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配.如果存在字母的排列 p ,使得将模式中的每个字母 x 替换为 p(x) 之后,我 ...