#hadoop #apache-pig
#hadoop #apache-pig
Вопрос:
Все
Я реализовал пользовательский агрегированный pig UDF. UDF реализует алгебраический интерфейс, и есть 3 класса — начальный, промежуточный и конечный для выполнения работы на разных этапах. Он работает правильно, но несколько неэффективно.
UDF использует алгоритм, который немного тяжелый, особенно при работе с одним значением. Он будет работать намного эффективнее при работе с большими группами данных — скажем, 100 за раз. Я заметил, что начальный класс всегда вызывается с одним значением, а затем объединяется с промежуточными и конечными классами.
Я знаю, что для таких случаев существует интерфейс аккумулятора, но я не смог найти документацию о том, как использовать его с алгебраическим UDF.
Итак, мой вопрос — есть ли у меня способ «заставить» pig передавать больше значений в начальный расчет — либо с помощью интерфейса аккумулятора, либо каким-либо другим способом.
Объяснение или указатель на документацию или образец были бы весьма признательны.
Спасибо, Амир
Ответ №1:
Кажется, что алгебраическая начальная функция Pig всегда будет получать единственное значение в своем кортеже (по крайней мере, согласно этому сообщению в блоге ).
Чтобы решить мою проблему, в итоге я просто вернул единственное значение в Initial без обработки вообще. Промежуточные и конечные функции будут выполнять алгоритм.
Поскольку промежуточная функция может получать выходные данные либо от начальной функции, либо от другой промежуточной функции (это согласно документам, я не видел этого на практике, в моих тестах промежуточная функция всегда получала значения от начальной функции), обе мои начальные и промежуточные функции теперь возвращают кортеж из двух значений. Первое значение в кортеже — это строка, указывающая мне источник значения — либо «Начальный», либо «Промежуточный». Второе значение в кортеже является фактическим результатом.