Разнесение массивов, объединение элементов карты с использованием ':'
в качестве разделителя, сбор элементов в массив, объединение массива в строку с разделителями-запятыми, использование функции 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"}
Если количество элементов массива ограничено, вы можете обойтись без разнесения:
select str_to_map(concat(col1[0],':',col2[0],',',
col1[1],':',col2[1],',',
col1[2],':',col2[2])
) as map_col
from test_map t