spark 把一列数据合并_Spark SQL 多列聚合的几种方法

一、引子

项目中遇到这样一张表:user

Sid

id

id_Type

tag

s_1

email

性别:男

s_1

email

年龄:12

s_1

13866660000

phone

会员:是

s_2

email

性别:男

要求对这个表按照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

你可能感兴趣的:(spark,把一列数据合并)