Массивы параллельного типа в улье - PullRequest
0 голосов
/ 24 августа 2018

У меня есть параллельные массивы в таблице улья, например:

with tbl as ( select array(1,2,3) as x, array('a','b','c') as y) 
select x,y from tbl;



x       y
[1,2,3] ["a","b","c"]
1 row selected (0.108 seconds)

Как я могу сжать их вместе (например, функцию python zip), чтобы я получил список структур, например

[(1, "a"), (2, "b"), (3,"c")]

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Вот моя попытка избежать двойного взрыва:

with tbl as (select array(1,2,3,4,5) as x, array('a','b','c','d','e') as y) 
select collect_list(struct(xi, y[i-1])) 
from tbl lateral view posexplode(x) tbl2 as xi, i;

Однако я столкнулся со странной ошибкой:

Error: Error while compiling statement: FAILED: IllegalArgumentException Size requested for unknown type: java.util.Collection (state=42000,code=40000)

Я смог обойти ее, используя

set hive.execution.engine=mr;

, который не так быстр / оптимизирован, как использование искры или тэза, как задний конец.

0 голосов
/ 24 августа 2018

Вы можете posexplode, поэтому он дает позиции в array, которые затем можно использовать для фильтрации.

select x,y,collect_list(struct(val1,val2))
from tbl
lateral view posexplode(x) t1 as p1,val1
lateral view posexplode(y) t2 as p2,val2
where p1=p2
group by x,y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...