concat_ws: 用指定的字符连接字符串
例如:
连接字符串:
concat_ws("_", field1, field2),输出结果将会是:“field1_field2”。
数组元素连接:
concat_ws("_", [a,b,c]),输出结果将会是:"a_b_c"。
collect_set: 把聚合的数据组合成一个数组,一般搭配group by 使用。
例如有下表T_course;
id name course
1 zhang san Chinese
2 zhang san Math
3 zhang san English
spark.sql("select name, collect_set(course) as course_set from T_course group by name");
结果是:
name course_set
zhang san [Chinese,Math,English]
RANK, DENSE_RANK, ROW_NUMBER都是把表中的行按分区内的排序标上序号,但有一点差别:
RANK:可以生成不连续的序号,比如按分数排序,第一第二都是100分,第三名98分,那第一第二就会显示序号1,第三名显示序号3。
DENSE_RANK: 生成连续的序号,在上一例子中,第一第二并列显示序号1,第三名会显示序号2。
ROW_NUMBER: 顾名思义就是行的数值,在上一例子中,第一第二第三将会显示序号为1,2,3。
下面的例子帮助理解,按年级分组,分数降序排列,分别新建列RANK, DENSE_RANK, ROW_NUMBER:
考试成绩排名
姓名 年级 分数 RANK DENSE_RANK ROW_NUMBER
张三 一年级 100 1 1 1
李四 一年级 100 1 1 2
王五 一年级 98 3 2 3
小明 二年级 100 1 1 1
小芳 二年级 95 2 2 2
小民 二年级 90 3 3 3
sparkSession.sql("SELECT * , " +
"RANK() OVER (PARTITION BY grade ORDER BY score DESC) AS rank, " +
"DENSE_RANK() OVER (PARTITION BY grade ORDER BY score DESC) AS dense_rank, " +
"ROW_NUMBER() OVER (PARTITION BY grade ORDER BY score DESC) AS row_number " +
"FROM ScoreDetail").show()
cast: select new column as null string in spark,默认null 作为新一列
select cast(null as string) as newcol from db.table
来源:CSDN
作者:我家小宝_朱朱
链接:https://blog.csdn.net/zhuchunyan_aijia/article/details/104158264