Я ищу "правильный" способ написания кода на 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-значений для значимости результатов лечения наблюдателей.Я действительно хотел бы использовать Python для этого: сама Pig явно не предназначена для такого рода задач, и я бы предпочел не переписывать существующий код на Java.Итак, что я хотел бы сделать - это как-то привязать к выводам команды STORE или DUMP из python и продолжить это.Моя проблема в том, чтобы выяснить, как лучше идти вперед.Вот способы, которые я вижу:
- Используйте Python для написания UDF, который будет выполнять вычисления.Я могу сделать это;фактически мой сценарий Pig уже вызывает пару пользовательских функций Python.Тем не менее, у меня сложилось впечатление, что пользовательские функции предназначены для работы с одним отношением / линией ввода одновременно, и мне нужно получать данные из нескольких отношений для достижения моей цели.Я могу взломать какое-то хранилище состояний в промежуточных вызовах UDF, но это не похоже на правильное решение.
- Использование встроенного Python через Jython в Pig 0.9.1.Я возлагал большие надежды на этот подход, но из ограниченной документации, которую я нашел по этой функции, она, по-видимому, предназначена главным образом для управления потоком работ (каноническим примером является обнаружение сходимости в интерактивных алгоритмах), а не для непосредственной работы с выходными данными.В частности, я вижу документацию о том, как связать метаданные задания, например о том, успешно ли они выполнены или нет, но не о том, как связать выходные данные.Хотелось бы доказать, что это не так.
- Пусть скрипт Python вызовет Pig и передаст ему локальные или HDFS пути к желаемым выходным местам, ожидая завершения задания и затем используя Python для чтения / анализа отношений из этогопути.Кажется действительно вздорным.
Есть ли очевидный вариант, который я упускаю, или большой пробел в моем понимании вышеуказанных вариантов?Ваш отзыв будет только приветствоваться!