Я ищу «правильный» способ написать код на Python, который может работать с выводами заданий Pig.Связывание с PIG STORE или DUMP вывода в Python
Вот моя ситуация. Я написал сценарий Свиньи, чтобы хрустить большой объем данных и выводить небольшой набор отношений. Объем выходных данных достаточно мал, чтобы напрямую подключаться к консоли DUMPed. Например:
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-валов для значимости результатов наблюдения. Я бы очень хотел использовать Python для этого: сам Pig явно не предназначен для такого рода задач, и я бы предпочел не переписывать существующий код на Java. Так что я хотел бы сделать, так это привязать к выводам команды STORE или DUMP из python и продолжить с этим. Моя проблема заключается в том, чтобы найти лучший способ продвижения вперед. Вот как я могу видеть:
- Используйте Python для написания UDF, который будет выполнять расчет. Я могу сделать это; на самом деле мой скрипт Pig уже вызывает пару UDF Python. Однако у меня сложилось впечатление, что UDF предназначены для работы над одним отношением/линией ввода за раз, и мне нужно получить данные из нескольких отношений для достижения моей цели. Я могу взломать какое-то хранилище состояний в UDF между вызовами, но это не похоже на правильное решение.
- Использование встроенного Python через Jython в Pig 0.9.1. Я возлагал большие надежды на этот подход, но из ограниченной документации, которую я нашел в этой функции, она, по-видимому, предназначена главным образом для управления потоком работы (канонический пример - обнаружение конвергенции в взаимных алгоритмах), а не для непосредственного взаимодействия с выходами. В частности, я вижу документацию о том, как привязываться к метаданным задания, например, было ли это успешным или неудачным, но не как привязываться к выводам. Хотелось бы ошибиться в этом.
- Попросите сценарий Python вызвать Pig и передать ему локальные или HDFS-пути желаемых локаций вывода, завершение задания завершения, а затем использование Python для чтения/разделения отношений с этими путями. Кажется, действительно взломан.
Есть ли очевидный вариант, который у меня отсутствует, или большой пробел в моем понимании вышеуказанных вариантов? Ваш отзыв будет очень приветствуем!
Я не знаю, как это сделать с свинью, но mrjob yelp - это именно то, что вы просите на # 3 в потоке хаопов. возможно, так же возможно использовать свиньи. Google показывает несколько результатов людей, просящих только об этом. Однако пример шахтера Дональда кажется мне более простым. – BenH