как вызвать скрипт свиньи внутри другого скрипта свиньи

У меня есть файл в hdfs со 100 столбцами, который я хочу обработать с помощью pig. Я хочу загрузить этот файл в кортеж с именами столбцов в отдельном скрипте свиньи и повторно использовать этот скрипт из других скриптов свиньи. Как мне это сделать?

Скажем, этот сценарий свиньи из 100 столбцов - 100col.pig. Как я могу вызвать это из Anotherone.pig?


person hese    schedule 26.09.2011    source источник


Ответы (4)


Проверьте команду exec (для пакетной обработки) или команду run (для интерактивных сценариев). Кроме того, если вам нужно использовать (не ворчащие) команды оболочки, проверьте команду fs. Вот хорошая ссылка:

http://pig.apache.org/docs/r0.7.0/piglatin_ref2.html

person Jonathan M    schedule 26.09.2011
comment
Команда запуска сделала это! exec не работает в моем случае, потому что я хочу, чтобы переменные, определенные в 100col.pig, были доступны из моего второго сценария. РУН сделал это. Спасибо! - person hese; 26.09.2011
comment
Как вы намекаете, RUN имеет дополнительные побочные эффекты; см. также этот более поздний ответ SO, который больше объясняет RUN по сравнению с EXEC. - person hoc_age; 16.07.2014

Вы должны попробовать использовать макросы, которые присутствуют в свинке версии 0.9.

http://pig.apache.org/docs/r0.9.1/cont.html#macros

person jaguarpaw    schedule 26.10.2011

Это немного поздно для этого ответа, но я недавно работал над этим требованием и не нашел почти ничего полезного, пока не нашел это, надеюсь, это поможет кому-то в этом:

** Этот отрывок взят из книги Programming Pig.

Долгое время в Pig Latin весь сценарий должен был быть в одном файле. Это привело к появлению нескольких довольно неприятных многотысячных строк Pig Latin. Начиная с версии 0.9, препроцессор можно использовать для включения одного сценария Pig Latin в другой. Вместе с макросами теперь можно написать модульную Pig Latin, которую легче отлаживать и повторно использовать: импорт используется для включения одного скрипта Pig Latin в другой:

--main.pig

import '../examples/ch6/dividend_analysis.pig';
daily = load 'NYSE_daily' as (exchange:chararray, symbol:chararray,
date:chararray, open:float, high:float, low:float, close:float,
volume:int, adj_close:float);
results = dividend_analysis(daily, '2009', 'symbol', 'open', 'close');

import записывает импортированный файл непосредственно в ваш скрипт Pig Latin вместо оператора import. В предыдущем примере содержимое дивиденда_анализа.pig будет помещено непосредственно перед оператором загрузки. Обратите внимание, что файл нельзя импортировать дважды. Если вы хотите использовать одну и ту же функцию несколько раз, вы должны написать ее как макрос и импортировать файл с этим макросом.

person user2221179    schedule 19.10.2014

Здесь есть 2 варианта, как указано выше. Свинья дает команды запуска и выполнения для удовлетворения ваших требований.

Команда exec предназначена для вызова скрипта свиньи, который является независимым и автономным запуском. Команда run предназначена для запуска pigscipt и сохранения его переменных и псевдонимов.

Я полагаю, вам нужно проверить команду запуска, чтобы выполнить ваши требования. http://pig.apache.org/docs/r0.9.1/cmds.html#run

person Priyabrata Patnaik    schedule 03.06.2014