鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 数据库 > DB2 > >

hive-group by的时候把两个字段变成map

来源:互联网 作者:佚名 时间:2018-02-10 22:15
源表结构: pcgid string mobilegid string value double 测试数据如下: p1 m1 0.6 p1m20.9 p2m11.0 需要的结果是: p1 {"m2":"0.9","m1":"0.6"} 2 p2 {"m1":"1.0"} 1 就是对源表进行group by之后对另外两个字段变成key-value存成一个map 查了一下,hive中

源表结构:

pcgid               string                                  

mobilegid           string                                  

value               double  

测试数据如下:

p1 m1 0.6
p1 m2 0.9
p2 m1 1.0

需要的结果是:

p1 {"m2":"0.9","m1":"0.6"} 2

p2 {"m1":"1.0"} 1

就是对源表进行group by之后对另外两个字段变成key-value存成一个map

查了一下,hive中没有现成的函数可以直接得到结果。不过可以转一个思路,把mobilegid和value先连接成字符串,然后再把整个set的结果连接成一个字符串,最后再用str_to_map,完美解决。

select pcgid as gid,str_to_map(concat_ws(",",collect_set(concat_ws(':', mobilegid, cast(value as string)) ))) as gids,count(1) as num
from gemini_product_id_connect_result_pair  
group by pcgid;

p

 

网友评论
<