我编写了程序来分析日志,其中意图是在日志中过滤/打印错误语句
String master = "local[*]";
String inputFilePath = "C:/test.log";
SparkConf conf = new SparkConf().setAppName(App.class.getName())
.setMaster(master);
JavaSparkContext context = new JavaSparkContext(conf);
JavaRDD<String> stringRDD = context.textFile(inputFilePath);
stringRDD.filter(text -> text.contains("ERROR"))
.collect().forEach(result -> System.out.println(result));
但是日志文件是由不同的进程连续写入的。这是时间线示例
现在我的程序应该在5秒后读取文件并仅从新添加的行打印错误语句。我应该手动生成继续保持的线程 每隔5秒读一次还是有更好的火花方式?
更新: -
基于谷歌,我试过下面但没有帮助
SparkConf conf = new SparkConf().setAppName(App.class.getName())
.setMaster(master);
//JavaSparkContext context = new JavaSparkContext(conf);
JavaStreamingContext streamingContext = new JavaStreamingContext(conf, Durations.seconds(10));
JavaDStream<String> stringRDD = streamingContext.textFileStream(inputFilePath);
stringRDD.filter(text -> text.contains("ERROR")).foreachRDD(result -> System.out.println(result));