Использование предложения IN с PIG FILTER

Поддерживает ли PIG предложение IN?

filtered = FILTER bba BY reason not in ('a','b','c','d');

или я должен разделить его на несколько ИЛИ?

Спасибо!


person hese    schedule 24.08.2011    source источник


Ответы (6)


Я не нашел его ни в одном из примеров в документации.

Вы можете получить, используя AND/OR/NOT

person Icarus    schedule 24.08.2011
comment
@hese Кстати: я делал проект по латыни свиней в колледже, и документация — по крайней мере, в то время — была УЖАСНОЙ. надеюсь сейчас лучше. - person Icarus; 24.08.2011
comment
не совсем в свинью, просто хотел исправить какой-то существующий код. так что пока не знаю :) - person hese; 02.09.2011
comment
Ссылка ведет на страницу 404. Отлично сработано! :) - person Marsellus Wallace; 29.08.2016

Вместо этого вы можете использовать приведенный ниже udf из Apache DataFu. Это поможет вам избежать написания большого количества операций ИЛИ.

https://github.com/linkedin/datafu/blob/master/src/java/datafu/pig/util/InUDF.java

person kris    schedule 21.03.2014
comment
Хотя PIG теперь имеет встроенный оператор In, он может привести к переполнению стека при компиляции для больших наборов. DataFu InUDF кажется более надежным - person seanv507; 10.09.2014

Добавлен Pig 0.12 В операторе http://www.edureka.co/blog/operators-in-apache-pig-diagnostic-operators/ см. внизу страницы.. примечания к выпуску. Не нашел его в официальных документах (кроме простого упоминания в примечаниях к выпуску)

person seanv507    schedule 09.09.2014
comment
Вот ссылка на него в официальной документации. - person Eyal; 12.11.2015

Нет, Pig не поддерживает пункт IN. У меня была аналогичная ситуация. Хотя вы можете использовать оператор AND и ключевое слово filter в качестве обходного пути. подобно

A= ЗАГРУЗИТЬ 'source.txt' КАК (пользователь:chararray, возраст:chararray);

B= FILTER A BY ($1 соответствует 'tapan') И ($1 соответствует 'superman');

Однако, если количество требуемой фильтрации огромно. Затем, вероятно, вы можете просто создать отношение, содержащее все эти ключевые слова, и выполнить соединение для фильтрации везде, где встречается совпадение. Надеюсь это поможет.

person Tapan Avasthi    schedule 15.05.2012
comment
Разве это не отфильтрует все, так как вы хотите, чтобы первое поле соответствовало Тапану и одновременно соответствовало супермену. - person FirstName LastName; 15.05.2015

Мы можем использовать предложение IN следующим образом:

A = FILTER alias_name BY col_name IN (val1, val2,...,valn);

DUMP A;
person Prashant_M    schedule 12.02.2017

вы можете сделать это, как:

X = FILTER bba BY NOT reason IN ('a','b','c','d');

дополнительная информация

person Tarivs    schedule 07.12.2017