来自foreachBatch的count()操作在结构化流中的第二次调用中获得0

时间:2019-06-17 06:37:22

标签: apache-spark spark-streaming spark-structured-streaming

我正在使用来自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
}

0 个答案:

没有答案