Spark Streaming仅传输在流初始化时间之后创建的文件

时间:2017-06-18 19:34:35

标签: scala apache-spark spark-streaming

有没有办法配置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()

1 个答案:

答案 0 :(得分:1)

这是FileInputDStream的记录行为。

如果我们想要使用该目录中的现有文件,我们可以使用Spark API加载这些文件并将所需的逻辑应用于它们。

val existingFiles = sparkContext.textFile(path)

val existingFilesDS = sparkSession.read.text(path)

然后,设置并启动流逻辑。 我们甚至可以在处理新文件时使用现有文件的数据。