У меня возникают проблемы при выборе массива STRUCTS в Hive. - PullRequest
0 голосов
/ 08 мая 2018

Я прочитал все примеры на сайте, но ни один из них не работает для меня. Я добавил Brickhouse UDFS:
create temporary function collect_struct as 'brickhouse.udf.collect.CollectUDAF' и

CREATE TEMPORARY FUNCTION collect AS 'brickhouse.udf.collect.CollectUDAF'

У меня есть примеры из оператора Hive SELECT для создания массива STRUCTS и
Данные выбора Hive в массив структур

Мой SQL:

create temporary function collect as 'brickhouse.udf.collect.CollectUDAF';

CREATE TABLE test ( <br>
house_id bigint,<br>
first_name string,<br>
last_name string<br>
);

INSERT INTO test VALUES<br>
(1,"Bob","jones"),<br>
(1,"Jenny","jones"),<br>
(2,"Sally","johnson"),<br>
(3,"John","smith"),<br>
(3,"Barb","smith");

select house_id<br>
      ,collect(named_struct("first_name", first_name, "last_name", last_name))<br>
from test<br>
group by house_id;

Я всегда получаю одну и ту же ошибку:

СБОЙ: ClassCastException org.apache.hadoop.hive.serde2.objectinspector.StandardStructObjectInspector не может быть приведен к org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector

Есть идеи?

1 Ответ

0 голосов
/ 26 октября 2018

Я использую версию Hive версии 1.1.0 и смог создать массив структур, не нуждаясь в пользовательских UDF-файлах файла Brickhouse. Попробуйте это.

SELECT house_id ,
       collect_list(named_struct("first_name", first_name, "last_name", last_name))
FROM house
GROUP BY house_id;

1   [{"first_name":"Bob","last_name":"jones"},{"first_name":"Jenny","last_name":"jones"}]   
2   [{"first_name":"Sally","last_name":"johnson"}]  
3   [{"first_name":"John","last_name":"smith"},{"first_name":"Barb","last_name":"smith"}]   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...