将配置单元数组列转换为地图列

时间:2019-06-28 10:37:10

标签: arrays hadoop hive

我有一个包含两个数组列的配置单元表,如下所示:

 col1        col2
a,b,c        1,2,3

我要将这两列转换为map列,如下所示:

    col
  {a->1,b->2,c->3}

如何做到?

1 个答案:

答案 0 :(得分:0)

展开数组,使用select作为分隔符来连接地图元素,将元素收集到数组中,将数组连接为逗号分隔的字符串,使用':'函数来获取地图:

str_to_map

结果:

create table test_map as 
select 
array('a','b','c') col1, array(1,2,3) as col2
;

select str_to_map(concat_ws(',',collect_set(concat(c1.col,':',c2.col)))) as map_col
 from test_map t 
      lateral view posexplode(col1) c1 as i,col
      lateral view posexplode(col2) c2 as i,col
where c1.i=c2.i

如果数组元素的数量受到限制,那么您将不会爆炸:

map_col 
{"a":"1","b":"2","c":"3"}