可以在Spark中两次调用count()吗?

时间:2019-06-12 08:47:39

标签: apache-spark apache-spark-sql spark-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()之后吗?

1 个答案:

答案 0 :(得分:1)

  

那么在一次调用count()之后,RDD还在吗?

-是的,您可以在RDD上运行多个操作。它会一直退出,直到火花会话仍然存在。

要检查计数是否为零。您可以使用rdd.isEmpty函数,如下所示:

if(rdd.isEmpty)
{// means count is zero
} else {//means not zero}