Hadoop/Pig 正则表达式匹配

标签 hadoop mapreduce hdfs

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

也就是说,如果给定的输入是两个文件,其中一个的编号为 A:

xxxx

年年

呜呜呜

Zyy

...等...

另一个是模式B:

xx.*

yyy.*

...等...

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

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

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

最佳答案

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

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

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

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

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

关于Hadoop/Pig 正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5706857/

上一篇:Hadoop管道问题

下一篇:hadoop链映射/减少

相关文章:

sql - 无法从Spark读取hadoop/hive外部S3表

java - 多个文件作为 Hadoop Dfs 和 mapreduce 的输入

hadoop - 如何让HDFS的replica block的位置自己设置?

linux - 将文件拆分为 HDFS 中的小文件

hadoop - 为什么最后一个 reducer 在合并步骤期间因 java 堆错误而停止

MongoDB 聚合框架性能在数百万个文档中变慢

java - yarn 异常 : Unauthorized request to start container

hadoop - 启动hadoop集群时的密码

使用子进程 hdfs "cat: Illegal file pattern: Illegal character range near index 11"打开 Python HDFS 文件

r - sparklyr - rsparkling as_h2o_frame() 错误 java.lang.IllegalArgumentException : Unsupported argument: (spark. dynamicAllocation.enabled,true)