【问题标题】:Spark Streaming only streams files created after the stream initialization timeSpark Streaming 仅流式处理在流初始化时间之后创建的文件
【发布时间】:2017-06-18 19:34:35
【问题描述】:

有没有什么方法可以配置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()

【问题讨论】:

    标签: scala apache-spark spark-streaming


    【解决方案1】:

    这是FileInputDStream 的记录行为。

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

    val existingFiles = sparkContext.textFile(path)
    

    val existingFilesDS = sparkSession.read.text(path)
    

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

    【讨论】:

    • 源代码中的文档有点含糊 - In this case "new" means files that became visible to readers during that time period。这使得文件看起来好像不需要在时间段开始后创建,而仅在时间段开始后才可供源使用。
    猜你喜欢
    • 2015-09-15
    • 1970-01-01
    • 2017-03-29
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    相关资源
    最近更新 更多