Hadoop/Pig正则表达式匹配
这是一种奇怪的情况,但我正在寻找一种方法,使用类似匹配的东西进行过滤,但要在未知模式(长度未知)列表中进行过滤 也就是说,如果给定的输入是两个文件,一个带有数字A: xxxx yyyy zzzz zzyy ……等等 另一个是模式B: xx* yyy* ……等等 如何根据第二个输入中的所有模式过滤第一个输入 如果我事先知道所有的模式,我可以 A=筛选依据(num匹配'somepattern.*'或num匹配'someotherpattern'…) 问题是我事先不知道它们,因为它们是模式而不是简单的字符串,所以我不能只使用连接/组(至少就我所知)。 也许是一个奇怪的嵌套的FOREACH…东西?Hadoop/Pig正则表达式匹配,hadoop,mapreduce,hdfs,Hadoop,Mapreduce,Hdfs,这是一种奇怪的情况,但我正在寻找一种方法,使用类似匹配的东西进行过滤,但要在未知模式(长度未知)列表中进行过滤 也就是说,如果给定的输入是两个文件,一个带有数字A: xxxx yyyy zzzz zzyy ……等等 另一个是模式B: xx* yyy* ……等等 如何根据第二个输入中的所有模式过滤第一个输入 如果我事先知道所有的模式,我可以 A=筛选依据(num匹配'somepattern.*'或num匹配'someotherpattern'…) 问题是我事先不知道它们,因为它们是模式而不是简单的
有什么想法吗?如果您使用作为
或操作的
,您可以从各个模式中构建一个模式
(xx.*|yyy.*|zzzz.*)
这将检查它是否匹配任何模式
(xx.*|yyy.*|zzzz.*)
编辑:
要创建组合正则表达式模式:
*创建一个以开头的字符串(
*读入每一行(假设每一行都是一个模式),并将其附加到一个字符串中,后跟一个
*读取完行后,删除最后一个字符(这将是不必要的|
)
*附加一个)
这将创建一个regex模式来检查输入文件中的所有模式。(注意:假定文件包含有效的模式)如何通过编程实现?正如我所说,我事先不知道这些模式有多少(或者它们的内容)。@Subsvn:用logicSo更新了帖子,所以用straight Pig无法做到这一点?@Subsvn:我不熟悉Pig,所以我不能具体说明如何实现解决方案。你可能想检查一下,看看这是否有助于为你指明一个有用的方向。啊,这就是问题所在:猪似乎相当不完整。不幸的是,我有点拘束于此。。。