方案:在结构化SQL中处理Spark流。我必须实现一个有关“我”在上一个“窗口”中处理了多少行的“信息”数据集。
一些代码。
val invalidData: Dataset[String] =
parsedData.filter(record => !record.isValid).map(record => record.rawInput)
val validData: Dataset[FlatOutput] = parsedData
.filter(record => record.isValid)
我有两个Dataset
。但是由于我正在使用流技术,所以无法执行.count
(引发错误:Queries with streaming sources must be executed with writeStream.start()
)
val infoDataset = validData
.select(count("*") as "valid")
但是发生了一个新错误:Append output mode not supported when there are streaming aggregations on streaming DataFrames/DataSets without watermark
,并且我不想将outputMode设置为完整,因为我不想从头开始总计数,而只是最后一个“窗口”批次。
不幸的是,我没有任何列可以注册为这些数据集的水印。
有没有办法知道每次迭代处理多少行?
按照杰克的评论,我尝试实施StreamingQueryProgress