Apache spark 如何获取spark结构化流媒体中的书面记录数?

Apache spark 如何获取spark结构化流媒体中的书面记录数?,apache-spark,apache-spark-sql,spark-streaming,metrics,Apache Spark,Apache Spark Sql,Spark Streaming,Metrics,我在一次spark会话中配置了一些结构化流。我需要知道每个流中读写了多少条记录。 例如,我有两条流: read-s3->transform->write-s3 读s3->转换->写db 我知道如何使用SparkListener().onTaskEnd(),但此时我没有查询名称,taskEnd.taskMetrics().outputMetrics().RecordsWrited()始终为0,因此它不是一个选项 另一种方法是使用dataset.map()中的累加器以增量方式计算它。但这并不是写了多

我在一次spark会话中配置了一些结构化流。我需要知道每个流中读写了多少条记录。 例如,我有两条流:

  • read-s3->transform->write-s3
  • 读s3->转换->写db
  • 我知道如何使用SparkListener().onTaskEnd(),但此时我没有查询名称,
    taskEnd.taskMetrics().outputMetrics().RecordsWrited()
    始终为0,因此它不是一个选项

    另一种方法是使用dataset.map()中的累加器以增量方式计算它。但这并不是写了多少条记录,而是要写的记录(如果sink没有失败的话)

    除此之外,我还尝试使用StreamingQueryListener(我使用它来获取
    numInputRows
    ),但我找不到任何有关书面记录数量的指标

    是否有可能获得此类指标?

    版本2.3.1中有一个固定的指标


    作为映射函数中的一种解决方法,可以在写入接收器之前计算记录数。

    是否仍然是关于?否。那篇文章是关于修复一些输入行,但这里我要问的是输出记录数,使用哪个接收器无关紧要。当然,有一个自定义接收器,我可以自己添加这些指标,但如果我使用FileStreamSink,该怎么办?FileStreamSink()中有一个bug,在2.3.1版中已修复,请将其作为答案发布()。它将对未来的访问者更加可见,并将允许解决这个问题。