Как получить массив / пакет элементов из группы Hive оператором?

Я хочу сгруппировать по заданному полю и получить результат с сгруппированными полями. Ниже приведен пример того, чего я пытаюсь достичь:

Представьте таблицу с именем «sample_table» с двумя столбцами, как показано ниже:

F1 F2 001 111 001 222 001 123 002 222 002 333 003 555 

Я хочу написать Hive Query, который даст следующий результат:

 001 [111, 222, 123] 002 [222, 333] 003 [555] 

В Pig это может быть очень легко достигнуто примерно так:

 grouped_relation = GROUP sample_table BY F1; 

Может кто-нибудь предложить, если есть простой способ сделать это в Улье? Я могу думать о том, что для этого нужно написать функцию User Defined Function (UDF), но это может быть очень трудоемким вариантом.

Встроенная совокупная функция collect_set ( doumented here ) дает вам почти то, что вы хотите. Это действительно будет работать на вашем примере ввода:

 SELECT F1, collect_set(F2) FROM sample_table GROUP BY F1 

К сожалению, он также удаляет повторяющиеся элементы, и я предполагаю, что это не ваше желаемое поведение. Мне collect_set странным, что collect_set существует, но нет версии для дублирования. Кто-то, похоже, думал об одном и том же . Похоже, что верхний и второй ответ там даст вам UDAF.

collect_set действительно работает так, как ожидалось, поскольку набор в соответствии с определением представляет собой набор четко определенных и отдельных объектов, т.е. объекты происходят ровно один раз или совсем не в наборе.