Вы можете использовать поточную UDF-функцию Hive (TRANSFORM), чтобы использовать UDF Python, который считывает из stdin и выводит на stdout. Вы не нашли примеров Python «UDAF», потому что UDAF относится к классу Java Hive, который вы расширяете, поэтому он будет только в Java.
При использовании потокового UDF, Hive будет выбирать, запускать ли или на карте или сокращать задание, поэтому нет необходимости указывать (подробнее об этой функции см. По этой ссылке: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Transform).
В основном, ваша реализация заключалась бы в написании скрипта python, который считывает из stdin, вычисляет некоторое число агрегатов и выводит его на stdout. Для реализации в улье сделать следующее:
1) Сначала добавьте питон скрипт в библиотеку ресурсов в улье, так что он получает распределены по кластеру:
add file script.py;
2) Затем вызовите ваше преобразование функции и ввод столбцы, которые вы хотите скопировать. Вот пример:
select transform(input cols)
using 'python script.py' as (output cols)
from table
;
В зависимости от того, что вам нужно сделать, вам может потребоваться отдельный сценарий сопоставления и редуктора. Если вам необходимо агрегировать данные на основе значения столбца, не забудьте использовать синтаксис CLUSTER BY/DISTRIBUTE BY на вашем этапе картографа, чтобы секционированные данные отправлялись в редуктор.
Дайте мне знать, если это поможет.
Я узнал, что вам нужно будет использовать JAVA для написания UDAF в Hive. – kee