有没有办法配置textFileStream
源,以便它处理添加到源目录的任何文件而不管文件创建时间如何?
为了演示此问题,我创建了一个基本的Spark Streaming应用程序,它使用textFileStream
作为源并将流内容打印到控制台。将运行应用程序之前创建的现有文件复制到源目录中时,不会向控制台打印任何内容。将应用程序开始运行后创建的文件复制到源目录时,将打印文件内容。以下是我的代码供参考。
val conf = new SparkConf().setAppName("Streaming Test")
.setMaster("local[*]")
val spark = new SparkContext(conf)
val ssc = new StreamingContext(spark, Seconds(5))
val fileStream = ssc.textFileStream("/stream-source")
val streamContents = fileStream.flatMap(_.split(" "))
streamContents.print()
答案 0 :(得分:1)
这是FileInputDStream的记录行为。
如果我们想要使用该目录中的现有文件,我们可以使用Spark API加载这些文件并将所需的逻辑应用于它们。
val existingFiles = sparkContext.textFile(path)
或
val existingFilesDS = sparkSession.read.text(path)
然后,设置并启动流逻辑。 我们甚至可以在处理新文件时使用现有文件的数据。