我正在使用来自redis的结构化流加载记录,代码如下
val image = spark.readStream.format("redis").schema(...).load()
val q = image.writeStream.foreachBatch {
(batchDF: DataFrame, batchId: Long) => {
logger.info(batchDF.count()) // INFO: 4 (or other number)
logger.info(batchDF.count()) // INFO: 0
logger.info(batchDF.count()) // INFO: 0
}
}.start()
q.awaitTermination()
如上所示,第一个logger.info
似乎获得了正确的计数batchDF
,但从第二个开始为0。
更重要的是,batchDF
在第一个count()
之后吗?
但是,即使不在火花流中,多次调用count()
也会得到相同的结果。流方案有何不同?
需要添加的内容,我使用sc.textFileStream
来拾取txt文件,而只是使用rdd而不是dataframe,并且不会发生此问题,多次调用count()
仍返回相同的结果, rdd版本的代码是
ssc.textFileStream(path/to/txt_directory).foreachRDD {
x => println(x.count())
x => println(x.count()) // give same result as the previous line
}