2011-04-18 73 views
1

这是一种奇怪的情况,但我正在寻找一种方法来使用类似MATCHES的方式进行过滤,但在未知模式(未知长度)的列表中进行过滤。Hadoop/Pig正则表达式匹配

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

XXXX

YYYY

ZZZZ

zzyy

...等等。

而另一个模式B:

XX。*

YYY。*

...等...

我怎样才能筛选第一输入,所有在第二的模式?

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

问题是我之前并不知道它们,既然它们是模式而不是简单的字符串,我不能只使用连接/组(至少据我所知)。 也许是一个奇怪的嵌套FOREACH ...的东西? 有什么想法吗?

回答

3

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

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

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

编辑: 要创建合并的正则表达式模式:
*创建字符串(
*读取在每行开始(假设每一行是一个图案),并将它附加到字符串后面是|
*当读完行,删除最后一个字符(这将是一个不需要|
*附加一个)

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

+0

这是如何以编程方式完成的?正如我所说,我并不知道这些模式中有多少(或者它们的内容,显然)是事先知道的。 – SubSevn 2011-04-18 18:10:21

+0

@SubSevn:更新了逻辑 – Nija 2011-04-18 18:27:47

+0

的帖子所以没有办法用直猪做到这一点? – SubSevn 2011-04-18 18:28:59