Spark SQL/Hive 同一列的多行记录合并为一行

来源:互联网 发布:淘宝津贴200是什么意思 编辑:程序博客网 时间:2024/05/17 23:00

可以写UDAF,但导jar包啥的挺麻烦的,我找了个简单方法,两个函数搞定。

需求是这样的,统计出同一用户在同一地点会去哪些商店,商店以':'隔开。

(第一列用户id,第二列商店id,第三列地区id,第四列日期)

spark-sql> select * from test;10277654822172201510281027765482217220151026881482482217220151129102776548221722015100710277654822172201510111027765482217220151010102776548221722015102310277654822172201510221027765820172201510301027765820172201510231027765820172201511141027765820172201511278814826709172201511218814827830172201511218814824317220151027Time taken: 0.259 seconds, Fetched 15 row(s)
太简单了

spark-sql> select uid, lid, concat_ws(':',collect_set(mid)) as mids from test group by uid,lid;881482  172     4822:6709:7830:43                                               10277651724822:820Time taken: 1.933 seconds, Fetched 2 row(s)
但要注意collect_set(mid)中的mid字段类型必须是string类型,不是的话改一下就可以了。

alter table test change mid mid string;
将mid字段的字段名改为mid,字段类型改为string类型。


参考博客:http://blog.csdn.net/yfkiss/article/details/7859477

0 0
原创粉丝点击