我有一个像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"))
,但是没有用。
答案 0 :(得分:0)
然后,Spark一次处理整个文件。但是我希望Spark可以在更新结果时提供一些如何“拆分”文件并一次处理每个拆分的功能,就像输入新单词时的单词计数示例更新结果一样。
这就是Spark结构化流处理文件的方式。它立即处理它们,不再考虑它们。它确实将文件“拆分”为多个部分(嗯,应该在存储设备中,例如HDFS,而不是Spark本身),但实际上是在后台进行的。
请注意,一旦处理了文件,就永远不会再对其进行处理。
我尝试添加
trigger(Trigger.ProcessingTime("x seconds"))
,但是没有用。
是的,但不是您想要的。
DataStreamWriter.trigger 设置流查询的触发器。默认值为ProcessingTime(0),它将尽快运行查询。
咨询DataStreamWriter的scaladoc。