Есть ли в 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 и далее.