如何使用猪中的正则表达式过滤掉字母数字值

时间:2016-02-08 06:28:16

标签: regex hive apache-pig

猪代码

relation2 =  filter relation1 by column1 not matches '.*[a-z0-9.*].*'

hive logic

column1 not like '%[a-z0-9]%'. 

我想在猪中实现相同的逻辑。

1 个答案:

答案 0 :(得分:0)

我认为您不需要字母数字记录。

您要查找包含字母或数字的记录。

你可以试试这个:

输入:

(123AET)
(123)
(AET)
(236MET)

所以你的预期输出是

 (123)
 (AET)

Pig脚本:此脚本是一个通用脚本,您可以从中保留单独的字母或单独使用数字或单独使用字母数字或两者都进行进一步处理

records = LOAD '/home/dir/alphanumeric.txt' USING PigStorage(',') AS(c1:chararray);

records_each = FOREACH records GENERATE c1,  (REGEX_EXTRACT(c1,'(^[a-zA-Z]+$)',1) is not null ? 'ALPHABETS' : (REGEX_EXTRACT(c1,'(^[0-9]+$)',1) is not null ? 'NUMBERS' : 'ALPHANUMERICS')) as c1_type;

records_filter = filter records_each by c1_type in( 'ALPHABETS','NUMBERS');

records_output = foreach records_filter generate c1;

dump records_output;