В Hive, как преобразовать массив строк в массив числовых чисел - PullRequest
1 голос
/ 24 сентября 2019

У меня есть таблица улья, которая выглядит следующим образом:

id | value
 1 | ['0', '0', '1', '0', '1', '1', '0', '0']
 2 | ['2', '0', '3', '0', '3', '1', '2', '1']

Я хочу, чтобы результат был следующим:

id | value
 1 | [0,0,1,0,1,1,0,0]
 2 | [2,0,3,0,3,1,2,1]

Мне нужно преобразовать их в массивfloat, чтобы я мог использовать их в ST_Constains(ST_MultiPolygon(), st_point()), чтобы определить, находится ли точка в области.

Я новичок в Hive, не уверен, что это возможно, любая помощь будет очень признательна.

1 Ответ

2 голосов
/ 24 сентября 2019

Вы можете взорвать массив, привести значение, собрать массив снова.Демо:

with your_table as(
select stack(2,
 1 , array('0', '0', '1', '0', '1', '1', '0', '0'),
 2 , array('2', '0', '3', '0', '3', '1', '2', '1')
 ) as (id,value)
 ) --use your_table instead of this


 select s.id, 
        s.value                            as original_array, 
        collect_list(cast(s.str as float)) as array_float 
 from
(select t.*, s.* 
 from your_table t
               lateral view outer posexplode(t.value)s as pos,str       
   distribute by t.id, t.value 
         sort by s.pos --preserve order in the array
 )s  
group by s.id, s.value;  

Результат:

OK
1       ["0","0","1","0","1","1","0","0"]       [0.0,0.0,1.0,0.0,1.0,1.0,0.0,0.0]
2       ["2","0","3","0","3","1","2","1"]       [2.0,0.0,3.0,0.0,3.0,1.0,2.0,1.0]

См. Также этот ответ о сортировке массива в запросе https://stackoverflow.com/a/57392965/2700344

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...