spark sql collect_set、collect_list 、concat_ws都用来做字段拼接,其实和mysql中的字段拼接函数差不多,请参考Mysql中concat()、concat_ws()和 group_concat() 字段拼接的用法

1.concat_ws()函数

concat_ws()-CONCAT With Separator ,用分隔符来拼接字段

spark中concat_ws()和Mysql中一样,所以不多解释,

看源码/**

* Concatenates multiple input string columns together into a single string column,

* using the given separator.

*使用指定的分隔符将多个列拼接到单个字符串列中

*

* @group string_funcs

* @since 1.5.0

*/

@scala.annotation.varargs

def concat_ws(sep: String, exprs: Column*): Column = withExpr {

ConcatWs(Literal.create(sep, StringType) +: exprs.map(_.expr))

}

2.collect_set和collect_list

collect_set和collect_list,都是将分组后的单个列放到一个集合中

不同的是和java集合一样,Set不能存重复的值,是去重的,而list是不去重的/**

* Aggregate function: returns a list of objects with duplicates.

*聚合函数返回可重复的list对象

* @group agg_funcs

* @since 1.6.0

*/

def collect_list(e: Column): Column = withAggregateFunction { CollectList(e.expr) }

/**

* Aggregate function: returns a set of objects with duplicate elements eliminated.

*聚合函数返回去重后的set对象

* @group agg_funcs

* @since 1.6.0

*/

def collect_set(e: Column): Column = withAggregateFunction { CollectSet(e.expr) }

案例:df.groupBy("age").agg(collect_set("name")).show()

返回结果+---+-----------------+

|age|collect_set(name)|

+---+-----------------+

| 20|    [LI, Justin]|

| 19|      [Justin]|

| 29|     [Michael]|

| 30|        [Andy]|

+---+-----------------+

3.联合使用实现分组拼接字段

记得mysql 中的group_concat嘛,collect_list 、concat_ws联合使用就能实现分组拼接的效果sqlContext.sql("select concat_ws(',',collect_set(name)) as names from people group by age").show()

返回结果+---------+---+

|   names|age|

+---------+---+

|LI,Justin| 20|

|   Justin| 19|

|  Michael| 29|

Andy| 30|

+---------+---+

mysql collect_set_spark sql concat_ws() collect_set() collect_list() 字段值拼接相关推荐

  1. jdbc 3种获得mysql插入数据的自增字段值的方法_JDBC 3种获得mysql插入数据的自增字段值的方法...

    JDBC 3种获得mysql插入数据的自增字段值的方法. 1. Retrieving AUTO_INCREMENT Column Values using Statement.getGenerated ...

  2. Mysql Sql语句令某字段值等于原值加上一个字符串

    MySQL连贯字符串不能利用加号(+),而利用concat. 比方在aa表的name字段前加字符'x',利用: update aa set name=concat('x',name); 替换: UPD ...

  3. Mysql中用SQL增加、删除字段,修改字段名、字段类型、注释,调整字段顺序总结...

    转自:http://www.111cn.net/database/mysql/71648.htm 1.增加一个字段  代码如下 复制代码 //增加一个字段,默认为空 alter table user ...

  4. mysql collect_set_Hive sql 使用group by 字段被限制使用 collect_set/collect_list处理

    hive> SELECT userid ,Sequnce ,ActionTime  FROM T_BZ_ClientActionLog GROUP BY Sequnce ,ActionTime ...

  5. spark sql 之 collect_set collect_list 后WrappedArray 取值

    示例:demo数据 userId place 1001 北京 1001 上海 spark建立的虚拟表 userPlaceView.根据用户ID进行分组,用collect_set(place)获取pla ...

  6. mysql 中将表中某一字段值查询出来,更新到另一个字段上的SQL写法

    场景:想要将receiveTime的值赋给create_time,此时涉及到同表"自更新"的操作 1.错误示例 update order_info set create_time ...

  7. jdbc 3种获得mysql插入数据的自增字段值的方法_【JDBC】向数据表插入数据时,自动获取生成的主键...

    数据表设计时,一般都会有一个主键(Key)(自己指定),有时也可以使用联合主键: 有许多数据库提供了隐藏列为表中的每行记录分配一个唯一键值(如:rowid): 当我们没有指定哪一列作为主键key时,数 ...

  8. SQL 查询整型字段值和十六进制相互转换

    数据库中存储是整型字段,有时展示需要转换为十六进制数据显示,这样就方便分析,例如MAC地址,固件版本信息. 1. 使用CONVERT函数 将整型数值转换为十六进制数据 SELECT CONVERT(V ...

  9. SQL Server 批量更新字段值为ROW_NUMBER()+列名称

    摘要:有这样一个需求,需要把数据表中的列名称的数据按行号重新排序并更新一下,这里用到了ROW_NUMBER()函数. 一:需求如下图: 二:通过执行如下sql语句实现了上面的需求,如下: update ...

最新文章

  1. Neumorphism.io一个神奇的网站,满足各种圆角矩形ICON图表立体化效果要求,这种样式的名称——新拟态
  2. JCIM| 基于双向RNN的分子生成模型
  3. 数据中心虚拟化的7大考量要素
  4. Git复习(四)之解决冲突
  5. Activity 中的Toast在Activity销毁后报错,解决方法,把context改成应用的
  6. 入门案例中使用的组件介绍
  7. indices should be one-based and in ascending order
  8. linux adc测试程序,基于Qt4.7的ADC测试程序
  9. 操作系统饥饿现象_操作系统心得体会
  10. Python 实现网络爬虫小程序
  11. Must、should、have to、can 和 need to的否定句_56
  12. 三星Galaxy S21 Ultra相机再升级:1.08亿主摄+全新传感器夜景更强
  13. MySQL-事务的实现-redo
  14. 一个我自己建的程序员资料分享站
  15. 千军万马跑协程goroutine
  16. poj 3074 Sudoku
  17. AppLinks使用详解
  18. 搭建php环境,更换织梦服务器
  19. 回弹强度记录表填写_混凝土回弹强度记录表格
  20. 电子海图的航线多尺度生成方法

热门文章

  1. java tomcat 日志分析工具_tomcat日志集中采集、分析与展示的几种方法
  2. 情侣计算器------计算TA的价格
  3. Java课程设计题目二:保存计算过程的计算器
  4. K近邻算法--约会网站配对
  5. springboot+uniapp(vue) 微信公众号h5开发
  6. multisim怎么设置晶体管rbe_模拟电子电路multisim仿真(很全 很好)
  7. 【MATLAB App Designer】实例:调用simulink模型并打包为独立程序
  8. JS校验正整数(不包含0)|| 校验正数(不包含0)
  9. delphi 中 delete的用法
  10. 不用代码,从搜索数据中解读星巴克“猫爪杯”如何挠你的心