Hadoop / Pig正则表达式匹配

时间:2011-04-18 17:54:55

标签: hadoop mapreduce hdfs

这是一种奇怪的情况,但我正在寻找一种方法来过滤使用像MATCHES这样的东西,但是在未知模式列表中(未知长度)。

也就是说,如果给定的输入是两个文件,一个是数字A:

XXXX

YYYY

ZZZZ

zzyy

...等...

另一个有模式B:

XX *

YYY。*

...等...

如何通过第二个中的所有模式过滤第一个输入?

如果我事先知道所有的模式,我可以 A = FILTER A BY(num MATCHES'tomepattern。*'或num numCHCH''someotherpattern'....);

问题在于我事先并不知道它们,因为它们是模式而不是简单的字符串,所以我不能只使用连接/组(至少就我所知)。 也许是一个奇怪的嵌套FOREACH ......的事情? 有什么想法吗?

1 个答案:

答案 0 :(得分:3)

如果您使用|作为OR运作,则可以使用各个模式构建模式。

(xx.*|yyy.*|zzzz.*)

这将检查它是否与任何模式匹配。

编辑: 要创建组合的正则表达式模式:
*创建以(开头的字符串
*读入每一行(假设每一行是一个模式)并将其附加到一个字符串后跟|
*完成阅读行后,删除最后一个字符(这将是不需要的|
*附加)

这将创建一个正则表达式模式来检查输入文件中的所有模式。 (注意:假设文件包含有效模式)