我已经花了数小时对此事扑朔迷离。 Pig的文档说它使用Java的正则表达式,但是当我在具有相同REGEX的Java中尝试相同的东西时,它可以按预期工作。
我有此数据:
id=6139406,ci=6139407,corr_id_=8c0c7700f95aa
id=6139106,ci=6139107,corr_id_=0e89749_df942a
id=6139906,ci=6139907,corr_id_=09ea6&f6cf94cb
id=6141100,ci=6141101,corr_id_=42ab372dfacd5
id=6141100,ci=6141101,corr_id_=asssddsA01
这个简单的Pig试图根据字母数字的id进行过滤;
A = LOAD 'users.dat' USING PigStorage(',') AS (id:chararray, tid:chararray, corr_id:chararray); -- loading data
B = FILTER A BY ($2 matches 'corr_id_=[a-zA-Z0-9]*');
DUMP B;
在我尝试输入正则表达式的数字部分之前,一切正常。一旦输入0-9或\ d,它们在Java中都是有效的,就无法匹配。
我在这里想念什么?
语法是'.*expr.*'
B = FILTER A BY ($2 matches '.*(corr_id_=[a-zA-Z0-9]).*');