一、引子
项目中遇到这样一张表:user
Sid
id
id_Type
tag
s_1
性别:男
s_1
年龄:12
s_1
13866660000
phone
会员:是
s_2
性别:男
要求对这个表按照sid 进行聚合,将所有的id聚合成一个json,所有的tag聚合成一个json。
在hive和Spark中,对tag的聚合相对简单,用聚合函数collect_list 或者collect_set(hive sql 聚合函数)或者直接基于Spark算子计算。
二、思路
id和id_Type 如何聚合呢?有以下几种方案:
1. 将id,idType 使用特殊字符拼接成字符串,看待成一列聚合;
2. 同上,也是拼接成字符串,但使用Json保留原始数据结构;
3. 将id,idType 通过nestRow 构造成Row 结构。
4. 转换成rdd,基于rdd算子聚合和Json化
对于方法1:如果目标json 结构要求 按照
{ "idType":
[
{"11111111"},
{"2222222"}
]
}
这种格式存储当id中存在特殊字符时,聚合后的结果如何切割是个棘手的问题&#x