Spark SQL 中的array类的函数例子

本文通过实际案例,详细介绍了Spark SQL中处理数组类型的函数用法,包括数组的转换、展开、统计和排序等操作。在处理多对多关系的数据时,如理财APP中的素材与产品关联,这些技巧显得尤为重要。文章还分享了在操作过程中遇到的陷阱及解决方案,为Spark SQL的学习者提供了实用参考。
摘要由CSDN通过智能技术生成

需求背景:

在理财 APP 中,素材、广告位、产品、策略有时候是多对多的关系。比如,在内容中台,一个素材可能关联理财、基金、存款某些产品,那我们统计该素材的好不好,转化率好不好,该归属于哪些业务?再进而计算某些业务的贡献,就可能需要用到数组。

还是不怎么看文档,因为文档的例子不够直观。

在https://community.cloud.databricks.com/ 上创建表的方法,可以参考文档,https://docs.databricks.com/sql/language-manual/sql-ref-syntax-ddl-create-table-using.html#examples

创表

CREATE TABLE student (name STRING, courses STRING)

插入数据

INSERT INTO student (name, courses) VALUES ('Alice''Math'), ('Alice''Science'), ('Bob''English'), ('Bob''History'), ('Bob''Art'), ('Charlie''Math'), ('Charlie''Art'), ('David''Science'), ('Emma''Math'), ('Emma''English'), ('Emma''Science');

数据如下:

name courses
Alice Math
Alice Science
Bob English
Bob History
Bob Art
Charlie Math
Charlie Art
David Science
Emma Math
Emma English
Emma Science
需求1

现在需要将 student 的数据变成一个学生一行数据,分别将课程拼接成字符串和组成数组类型。代码如下:

select 
    name
   ,concat_ws(', ', collect_list(courses)) as courses
from 
    student
group by 
    name
name courses
Charlie Math, Art
Bob English, History, Art
Alice Math, Science
Emma Math, English, Science
David Science
select 
   name,array_agg(courses) as courses
from 
   student
group by 
    name;
name courses
Charlie ["Math","Art"]
Bob ["English","History","Art"]
Alice ["Math","Science"]
Emma ["Math","English","Science"]
David ["Science"]
select name, collect_list(courses) as courses
from student
group
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值