Hadoop Pig: передача аргументов командной строки

Есть ли способ сделать это? например, передать имя обрабатываемого файла и т. д.?


person downer    schedule 12.11.2010    source источник


Ответы (4)


Это появилось в еще вопрос, но вы можете указать входной параметр в командной строке и использовать его при загрузке, например:

Командная строка:

pig -f script.pig -param input=somefile.txt

скрипт.свинья:

raw = ЗАГРУЗИТЬ '$ input' КАК (...);

Обратите внимание, что если вы используете Amazon Web Services Elastic Map Reduce, то «$input» — это то, что передается сценарию для любого введенного вами ввода.

person rjzii    schedule 13.11.2010
comment
Что если нам нужно передать Timestamp в формате (2015-08-06 04:54:49), в моем случае это выдает ошибку - Относительный путь в абсолютном URI: 04:36:33. это из-за двоеточия, которое мы используем в отметке времени. - person Indrajeet Gour; 06.08.2015

Вы можете использовать ...
1. если параметров мало, используйте -param (-p)
2. если параметров много, используйте -param_file (-m)

Вы можете использовать любой подход в зависимости от характера значения ваших аргументов командной строки, я использую -param, когда разрабатываю и тестирую свои сценарии. Как только сценарий свиньи готов к пакетной обработке или запуску через crontab, я использую -param_file, чтобы, если потребуется какое-либо изменение, я мог легко обновить файл params.init.

man pig покажет вам все доступные варианты.

-m, -param_file path to the parameter file
-p, -param key value pair of the form param=val

Вот пример кода...

student.txt (входные данные)

001,Rajiv,Reddy,21,9848022337,Hyderabad
002,siddarth,Battacharya,22,9848022338,Kolkata
003,Rajesh,Khanna,22,9848022339,Delhi
004,Preethi,Agarwal,21,9848022330,Pune
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar
006,Archana,Mishra,23,9848022335,Chennai
007,Komal,Nayak,24,9848022334,trivendram
008,Bharathi,Nambiayar,24,9848022333,Chennai

params.init (файл для хранения всех параметров)

fileName='hdfs://horton/user/jgosalia/students.txt'
cityName='Chennai'

фильтр.свинья

students = LOAD '$fileName' USING PigStorage(',') AS (id:int, firstname:chararray, lastname:chararray, age:int, phone:chararray, city:chararray);
students = FILTER students BY city == '$cityName';
DUMP students;

ВАРИАНТ 1: Использование параметров в командной строке (-param или -p) и вывод

pig -param fileName='hdfs://horton/user/jgosalia/students.txt' -param cityName='Chennai' filter.pig

... Trimming the logs ...

(6,Archana,Mishra,23,9848022335,Chennai)
(8,Bharathi,Nambiayar,24,9848022333,Chennai)

ВАРИАНТ 2: Использование файла параметров в командной строке (-param_file или -m) и вывод

pig -param_file params.init filter.pig

... Trimming the logs ...

(6,Archana,Mishra,23,9848022335,Chennai)
(8,Bharathi,Nambiayar,24,9848022333,Chennai)

ПРИМЕЧАНИЕ. Используйте абсолютный путь для путей к файлам (как в качестве параметров, так и при указании пути к файлу параметров для -param_file (-m)).

person JRG    schedule 06.05.2017
comment
примечание для пользователей python: при использовании subprocess.call(pig_cmd.split()) заключите pig_cmd в двойные кавычки, например pig_cmd = pig -param input_file -param output_file pigscript.pig - person Quetzalcoatl; 11.06.2017

Передать параметры скрипту PIG очень просто.

Сначала отметьте свои переменные в свинье, используя '$', например, $input_file. Затем передайте параметры вашему скрипту, используя pig -params input_file='/path/to/data'

для получения дополнительной информации см. здесь: http://wiki.apache.org/pig/ParameterSubstitution

person Lord Voldemort    schedule 09.01.2014

да.

Вы можете передавать параметры вместе с опциями командной строки, используя опцию pig param.

--customparam.pig
--load hdfs/local fs data 
 original = load '$input' using PigStorage('$delimiter');
--filter a specific field value into another bag  
 filtered = foreach original generate $split; 
--storing data into hdfs/local fs 
  store filtered into '$output';

pig -x local -f customparam.pig -param input=Pig.csv -param output=OUT/pig -param delimiter="," -param split='$1'

Для получения дополнительной информации: проверьте это

person USB    schedule 29.07.2014
comment
Пожалуйста, добавьте сюда суть вашего поста на другом сайте. Если ссылка на другом сайте умрет, произойдет гниение ссылки. - person FirstName LastName; 23.06.2015