我有以下代码:
SparkConf sparkConf = new SparkConf().setAppName("My app")
.setMaster("local[4]")
.set("spark.executor.memory", "2g")
.set("spark.driver.allowMultipleContexts", "true");
JavaStreamingContext jssc = new JavaStreamingContext(sparkConf, Durations.seconds(2));
JavaDStream<String> trainingData = jssc.textFileStream("filesDirectory");
trainingData.print();
jssc.start();
jssc.awaitTermination();
不幸的是,要流式传输目录中的任何文件,我必须编辑此文件,并在启动流上下文后重命名,否则将无法处理。
我应该编辑和重命名每个文件来处理它,还是有另一种处理现有文件的方法,只需编辑并保存它们。
P.S。当我将新文件移动到此目录时,我还需要编辑并重命名此文件以将其流式传输!!!
答案 0 :(得分:4)
在移动到目标目录之前尝试触摸文件。 以下是javadoc所说的内容。
path
是否为currentTime
批次的新文件。因为它是currentTime
答案 1 :(得分:1)
JavaStreamingContext.textFileStream
返回FileInputDStream
,用于在定期添加/更新文件夹中的文件时监控文件夹。您将在每两秒钟后收到通知,仅在添加/更新新文件时才会收到通知。
如果意图只是阅读文件,则可以使用SparkContext.textFile。
查看JavaStreamingContext.textFileStream()
源代码中的文档/**
* Create a input stream that monitors a Hadoop-compatible filesystem
* for new files and reads them as text files (using key as LongWritable, value
* as Text and input format as TextInputFormat). Files must be written to the
* monitored directory by "moving" them from another location within the same
* file system. File names starting with . are ignored.
*/