Есть ли в Apache PIG какой-либо условный IF-оператор?
Фактически я пишу PIG Script и хочу выполнить некоторый набор операторов, если выполнено одно из условий.
Я установил одну переменную и проверил некоторое значение этой переменной. предполагать
if flag==0 then
A = LOAD 'file' using PigStorage() as (f1:int, ....);
B = ...;
C = ....;
else
again some Pig Latin statements
Могу ли я сделать это в PIG Script? Если да, то как я могу это сделать?
Благодарю.
Ответы
Ответ 1
Да, Свинья предлагает конструкцию if-then-else, но она не используется так, как вы просите.
Pig if-then-else - это арифметический оператор, вызываемый с сокращением "condition? True_value: false_value" как часть выражения, например:
X = FOREACH A GENERATE f2, (f2==1?1:COUNT(B));
Вы должны уже загрузить таблицу A для этого. Чтобы выполнить поток управления вокруг всех отчетов Pig, вам понадобится что-то вроде oozie, как предложил Fakrudeen.
Ответ 2
Вы можете создать обертку Python вокруг вашего скрипта Pig. См. " Встроенная справка" в документах.
Ответ 3
Свинья - это язык потока данных, а не поток управления. Только конструкция, которая приближается, является PIG split, но она очень ограничена.
Вы можете использовать oozie и его конструкцию решения с двумя сценариями свиньи.
Ответ 4
Создайте UDF (скажем, на Java), а затем вставьте его в свой скрипт PIG. Вам нужно будет "зарегистрировать" файл jar, который вы создаете после написания UDF.
//(что-то вроде этого), скажем, ваш UDF class
Java UDF class
- это UDFCondition
а сгенерированный файл jar - PigUDFCondition.jar, затем в вашем PIG Code
зарегистрироваться PigUDFCondition.jar
X = foreach A generate UDFCondition(..flag...)
Ответ 5
Существует выражение CASE, доступное начиная с версии 0.12 и далее.