Hadoop Pig: Passage des arguments de ligne de commande
-
09-10-2019 - |
Question
Est-il possible de le faire? par exemple, passe à traiter, etc le nom du fichier?
La solution
apparu dans une autre question, mais vous pouvez indiquer le paramètre d'entrée sur la ligne de commande et l'utilisation que lorsque vous chargez, par exemple:
Ligne de commande:
-f porc script.pig -param entrée = somefile.txt
script.pig:
raw = CHARGE '$ entrée' AS (...);
Notez que si vous utilisez le Web Amazon Elastic services Carte Réduire alors le « $ entrée » est ce qui est transmis au script pour toute entrée que vous fournissez.
Autres conseils
Vous pouvez utiliser ...
1. s'il y a peu de paramètres puis utilisez -param (-p)
2. s'il y a beaucoup de paramètres puis utilisez -param_file (-m)
Vous pouvez utiliser l'approche en fonction de la nature de la valeur de vos arguments de ligne de commande, j'utilise -param quand je suis développer et tester mes scripts. Une fois que le script de porc est prêt pour le traitement par lots ou en cours d'exécution à travers crontab, j'utilise -param_file de sorte que si tout changement nécessaire, je peux facilement mettre à jour le fichier params.init.
cochon homme vous montrera toutes les options disponibles.
-m, -param_file path to the parameter file
-p, -param key value pair of the form param=val
Voici un exemple de code ...
students.txt (données d'entrée)
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 (fichier à tenir tous les paramètres)
fileName='hdfs://horton/user/jgosalia/students.txt'
cityName='Chennai'
filter.pig
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;
OPT 1: Utilisation de params sur la ligne de commande (-param ou -p) et sortie
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)
OPT 2: Utilisation de fichier params sur la ligne de commande (ou -param_file -m) et sortie
pig -param_file params.init filter.pig
... Trimming the logs ...
(6,Archana,Mishra,23,9848022335,Chennai)
(8,Bharathi,Nambiayar,24,9848022333,Chennai)
NOTE:. Utiliser le chemin absolu pour les chemins de fichiers (à la fois en tant que paramètres et en donnant le chemin du fichier à -param_file param (-m))
Il est simple de passer des paramètres à un script PIG.
D'abord marquer vos variables chez le porc en utilisant « $ » par exemple fichier_entrée de $. Passez ensuite les paramètres que vous script à l'aide de porc -params fichier_entrée = '/ path / to / data'
pour plus d'information voir ici: http://wiki.apache.org/pig/ParameterSubstitution
Oui.
Vous pouvez passer des paramètres le long des options de commande en utilisant l'option de param
de porc.
--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';
-x -f porc customparam.pig -param entrée locale = Pig.csv -param sortie = OUT / porc delimiter -param = "" -param scission = '$ 1'
Pour plus d'informations: vérifier