Arrays 将配置单元阵列列转换为映射列

Arrays 将配置单元阵列列转换为映射列,arrays,hadoop,hive,Arrays,Hadoop,Hive,我有一个包含两个数组列的配置单元表,如下所示: col1 col2 a,b,c 1,2,3 col {a->1,b->2,c->3} 我想将这两列转换为map列,如下所示: col1 col2 a,b,c 1,2,3 col {a->1,b->2,c->3} 如何操作?分解数组,使用':'作为分隔符连接映射元素,将元素收集到数组中,将数组连接到逗号分隔的字符串中,使用s

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

 col1        col2
a,b,c        1,2,3
    col
  {a->1,b->2,c->3}
我想将这两列转换为map列,如下所示:

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

如何操作?

分解数组,使用
':'
作为分隔符连接映射元素,将元素收集到数组中,将数组连接到逗号分隔的字符串中,使用
str\u to\u 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,':',col2[c1.i] )))) as map_col
 from test_map t 
      lateral view posexplode(col1) c1 as i,col
结果:

map_col 
{"a":"1","b":"2","c":"3"}   
如果数组元素的数量有限,则可以不分解:

select str_to_map(concat(col1[0],':',col2[0],',',
                         col1[1],':',col2[1],',',
                         col1[2],':',col2[2])
                 ) as map_col
 from test_map t 

分解数组,使用
':'
作为分隔符连接映射元素,将元素收集到数组中,将数组连接到逗号分隔的字符串中,使用
str\u to\u 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,':',col2[c1.i] )))) as map_col
 from test_map t 
      lateral view posexplode(col1) c1 as i,col
结果:

map_col 
{"a":"1","b":"2","c":"3"}   
如果数组元素的数量有限,则可以不分解:

select str_to_map(concat(col1[0],':',col2[0],',',
                         col1[1],':',col2[1],',',
                         col1[2],':',col2[2])
                 ) as map_col
 from test_map t