从HDFS源流式传输时如何运行多个批处理?

时间:2019-01-02 17:05:04

标签: apache-spark spark-structured-streaming

我有一个像val df = spark.readStream.schema(s).parquet ("/path/to/file").where("Foo > 0").groupBy("bar").agg(expr("sum(Foo)"))这样的数据集。该数据集有超过一百万条记录,并且Parquet文件包含1个分区。

我通过df.writeStream.outputMode("update").format("console").start开始直播。

然后,Spark一次处理整个文件。但是我希望Spark可以在更新结果时提供一些如何“拆分”文件并一次处理每个拆分的功能,就像输入新单词时的单词计数示例更新结果一样。

我尝试添加trigger(Trigger.ProcessingTime("x seconds")),但是没有用。

1 个答案:

答案 0 :(得分:0)

  

然后,Spark一次处理整个文件。但是我希望Spark可以在更新结果时提供一些如何“拆分”文件并一次处理每个拆分的功能,就像输入新单词时的单词计数示例更新结果一样。

这就是Spark结构化流处理文件的方式。它立即处理它们,不再考虑它们。它确实将文件“拆分”为多个部分(嗯,应该在存储设备中,例如HDFS,而不是Spark本身),但实际上是在后台进行的。

请注意,一旦处理了文件,就永远不会再对其进行处理。

  

我尝试添加trigger(Trigger.ProcessingTime("x seconds")),但是没有用。

是的,但不是您想要的。

  

DataStreamWriter.trigger 设置流查询的触发器。默认值为ProcessingTime(0),它将尽快运行查询。

咨询DataStreamWriter的scaladoc。