繁体   English   中英

Pig脚本/命令来过滤多个字符串上的文件

[英]Pig script/command to filter a file on multiple strings

我正在尝试编写一个Java程序或Hadoop Pig脚本,该脚本将使用逗号分隔的字符串(例如abc, def, xyz )作为参数,并为包含一个或多个这些字符串的记录过滤文件。

例如

输入文件:

1    abctree
2    pqrwewe
3    rtrxyz45
4    abcxyz
5    234rt23

输入参数为: abc, def, xyz

预期产量:

1    abctree
3    rtrxyz45
4    abcxyz

我能够编写脚本,使用matches在1个字符串上过滤文件,但不知道如何对多个字符串执行此操作。 我是否需要为此编写UDF?

我已将Java标记添加到此问题,因为根据我的初步发现,我将必须编写将用Java编写的UDF。 因此,如果有人知道用Java编写此方法的方法,请发布您的解决方案。

我已经弄清楚了:

B = filter A by (n matches '.*string1.*' or n matches '.*string2.*' or n matches '.*string3.*');

这可以解决问题。

但是,根据我的要求,我将从命令行接受“逗号分隔”输入,例如string1, string2, string3 因此,下一个任务是以某种方式分离各个字符串,并在上面的表达式中使用它们。 如果有人知道该怎么做(尤其是没有UDF的人),请发布。

我不了解Pig,但是在Java中,您可以使用以下代码:

String[] words = input.split("[\\s,]+");

String line;
while((line = file.readLine()) != null){
    for(String word : words){
        if(line.contains(word)){
            System.out.print(line);
            break;
        }
    }
}

contains足以找到单词。 您可以根据input字符串创建一个正则表达式,然后对其进行匹配。 该表达式看起来像foo|bar|baz ,但是您需要转义元字符,以便它们在比赛期间是原义的,这可以通过java.util.regex.Pattern.quote完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM