Условная генерация Apache Pig foreach

Я пытаюсь реализовать условную генерацию foreach, при которой данные одного из столбцов изменяются в зависимости от входных данных.

Скажем, например, у меня есть эти данные в псевдониме A:

dump A;
(George, Films)
(Martin, Books)

Я хочу сохранить Y, если имя начинается с G. Из документации Я знаю, что есть условная арифметическая операция, но я не могу найти способ сделать "начинается с X". Я думаю, что это должно быть что-то вроде этого, где ##### - это отсутствующее условие.

B = FOREACH A GENERATE (##### ? "Y":"N");

person Javier Cabero    schedule 23.02.2016    source источник


Ответы (2)


Вы ищете функцию SUBSTRING. Используйте это так:

b = foreach a generate $0.., (SUBSTRING($0,0,1)=='G'?'y':'n');

Об этом подробнее здесь

https://pig.apache.org/docs/r0.9.1/func.html#substring

это дало бы тебе

(George,Films,y)
(Martin,Books,n)
person Ran Locar    schedule 24.02.2016

Вы можете применять пользовательские функции в пределах GENERATE:

B = FOREACH A GENERATE MyUdf(name);

Где MyUdf — это функция, которую вы пишете для выполнения нужной вам логики. Я не знаю, как это сделать без UDF.

person Ben Watson    schedule 23.02.2016