在下面的代码中,我正在过滤包含404 HTTP状态代码的日志,但是现在如果我想过滤包含400-405任何HTTP状态代码的日志。
JavaRDD<String> IPList = sc.textFile("/home/bhaumik/Documents/access_log", 1)
.filter(new Function<String, Boolean>() {
@Override
public Boolean call(String v1) throws Exception {
// TODO Auto-generated method stub
return v1.contains(" 404 ");
}
});
那么有什么选择吗?
给出的是我的示例日志记录
64.242.88.10 - - [07/Mar/2004:20:55:43 -0800] "GET /mailman/listinfo/hs_support HTTP/1.1" 200 6294
64.242.88.10 - - [07/Mar/2004:20:56:56 -0800] "GET /twiki/bin/view/TWiki/WebTopicList HTTP/1.1" 200 14070
64.242.88.10 - - [07/Mar/2004:20:58:27 -0800] "GET /twiki/bin/attach/TWiki/WebPreferences HTTP/1.1" 401 12846
64.242.88.10 - - [07/Mar/2004:21:03:48 -0800] "GET /twiki/bin/view/TWiki/TWikiFAQ HTTP/1.1" 200 12050
64.242.88.10 - - [07/Mar/2004:21:06:05 -0800] "GET /twiki/bin/oops/TWiki/DefaultPlugin?template=oopsmore¶m1=1.5¶m2=1.5 HTTP/1.1" 200 11281
最佳答案
一种简单的方法是:
return v1.contains(" 400 ")||v1.contains(" 401 ")||v1.contains(" 402 ");
但是这样一来,当文件大小为400 ... 405时,您可能会得到误报
一种替代方法可能是:
String[] parts = v1.split(" ");
return parts[parts.length - 2].matches("40[0-5]");
希望能帮助到你。
关于java - 有什么办法可以过滤包含特定模式的RDD,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35777161/