在下面的代码中,我正在过滤包含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&param1=1.5&param2=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/

10-10 02:38