我正在使用来自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()
之后吗?
答案 0 :(得分:1)
那么在一次调用count()之后,RDD还在吗?
-是的,您可以在RDD上运行多个操作。它会一直退出,直到火花会话仍然存在。
要检查计数是否为零。您可以使用rdd.isEmpty
函数,如下所示:
if(rdd.isEmpty)
{// means count is zero
} else {//means not zero}