Реализация пользовательского Apache pig алгебраического UDF

#hadoop #apache-pig

#hadoop #apache-pig

Вопрос:

Все

Я реализовал пользовательский агрегированный pig UDF. UDF реализует алгебраический интерфейс, и есть 3 класса — начальный, промежуточный и конечный для выполнения работы на разных этапах. Он работает правильно, но несколько неэффективно.

UDF использует алгоритм, который немного тяжелый, особенно при работе с одним значением. Он будет работать намного эффективнее при работе с большими группами данных — скажем, 100 за раз. Я заметил, что начальный класс всегда вызывается с одним значением, а затем объединяется с промежуточными и конечными классами.

Я знаю, что для таких случаев существует интерфейс аккумулятора, но я не смог найти документацию о том, как использовать его с алгебраическим UDF.

Итак, мой вопрос — есть ли у меня способ «заставить» pig передавать больше значений в начальный расчет — либо с помощью интерфейса аккумулятора, либо каким-либо другим способом.

Объяснение или указатель на документацию или образец были бы весьма признательны.

Спасибо, Амир

Ответ №1:

Кажется, что алгебраическая начальная функция Pig всегда будет получать единственное значение в своем кортеже (по крайней мере, согласно этому сообщению в блоге ).

Чтобы решить мою проблему, в итоге я просто вернул единственное значение в Initial без обработки вообще. Промежуточные и конечные функции будут выполнять алгоритм.

Поскольку промежуточная функция может получать выходные данные либо от начальной функции, либо от другой промежуточной функции (это согласно документам, я не видел этого на практике, в моих тестах промежуточная функция всегда получала значения от начальной функции), обе мои начальные и промежуточные функции теперь возвращают кортеж из двух значений. Первое значение в кортеже — это строка, указывающая мне источник значения — либо «Начальный», либо «Промежуточный». Второе значение в кортеже является фактическим результатом.