我正在编写包含过滤器的结构化流查询,然后设置水印。如何记录过滤出的行?
这似乎不太可能,因为结构化流仅允许评估一个查询。显然,执行.collect
并记录行是行不通的,因为仅使用.writeStream
评估流数据集,并且查询中只能有一个这样的调用:
def process: DataFrame = {
// df is a streaming dataset
val toDrop = df.filter(condition)
val toKeep = df.filter(!condition)
// doesn't work on streaming datasets
log(s"Lines dropped: ${toDrop.collect.mkString(", ")}")
toKeep.withWatermark(...)
}
一种解决方案可能是将过滤器移至foreachBatch中,但就我而言,我需要在设置水印之前进行过滤,因此这不是一个选择。