想象我从结构化流中获得了一个流。
val sourceDF = sparkSession.readStream
.format("kafka")
.option("kafka.bootstrap.servers", revBrokers)
.option("subscribe", topic)
...
as[(String, String)]
并且我想计算第一个字段不为空时的行数。同时将字符串写入hdfs。
伪代码:
sourceDF.filter(_.1 != "").count.writeStream.option("checkpointPath", <cp-1>).format("console").start()
sourceDF.writeStream.option("checkpointPath", <cp-2>).start(<descDir>)
但是现在这两个流不同步,因为它们独立运行。
但是,我真正想要的是对非空行进行计数并同时打印出该数字,然后将流保存到hdfs,这样我就知道保存了多少行具有非空第一字段。
任何人有任何想法如何实现这一目标?我知道火花流不是为此设计的(副作用处理),但是有时多动作将非常有用(火花流可以做到这一点,因为它使用的是微批次)。