[英]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.