Я ищу «правильный» способ написать код Python, который может работать с выходными данными заданий Pig.
Вот моя ситуация. Я написал сценарий Pig для обработки большого количества данных и вывода небольшого набора отношений. Объем выходных данных достаточно мал, чтобы их можно было сбросить на консоль напрямую. Например.:
grunt> DUMP results
(Control, column1, column2, column3, column4, column5, column6)
(Treatment1, column1, column2, column3, column4, column5, column6)
(Treatment2, column1, column2, column3, column4, column5, column6)
(Treatment3, column1, column2, column3, column4, column5, column6)
grunt>
В качестве следующего шага я хочу сделать несколько вычислений чисел в отношениях, например вычисление p-vals для значимости наблюдаемых результатов лечения. Я бы очень хотел использовать для этого Python: сам Pig явно не предназначен для такого рода задач, и я бы предпочел не переписывать существующий код на Java. Итак, что я хотел бы сделать, так это привязать к выходам команды STORE или DUMP из python каким-то образом и продолжить с этим. Моя проблема заключается в том, чтобы найти лучший способ двигаться вперед. Вот как я могу видеть:
- Используйте Python, чтобы написать UDF, который будет выполнять вычисления. Я могу сделать это; на самом деле мой скрипт Pig уже вызывает пару UDF Python. Однако у меня сложилось впечатление, что UDF предназначены для работы с одним отношением / строкой ввода за раз, и мне нужно получать данные из нескольких отношений для достижения моей цели. Я могу собрать какое-то хранилище состояний внутри UDF между вызовами, но это не кажется правильным решением.
- Используйте встроенный Python через Jython в Pig 0.9.1. Я возлагал большие надежды на этот подход, но из ограниченной документации, которую я нашел по этой функции, кажется, что он предназначен в первую очередь для управления потоком заданий (канонический пример - обнаружение сходимости в интерактивных алгоритмах), а не для работы с выходными данными напрямую. В частности, я вижу документацию о том, как привязать к метаданным задания, например, удалось ли оно успешно или нет, но не о том, как привязать к выходным данным. Хотел бы быть доказанным, что ошибаюсь в этом.
- Попросите сценарий Python вызвать Pig и передать ему локальные или HDFS-пути желаемых выходных местоположений, ожидая завершения задания и затем используя Python для чтения / анализа отношений из этих путей. Кажется действительно хакерским.
Есть ли очевидный вариант, который мне не хватает, или большой пробел в моем понимании вышеперечисленных вариантов? Будем рады вашим отзывам!