如何获得Spark结构化流媒体中的书面记录数量?

时间:2018-02-01 14:43:46

标签: apache-spark apache-spark-sql spark-streaming metrics

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

  1. read-s3 - >变换 - >写-S3
  2. read-s3 - >变换 - >写分贝
  3. 我知道使用SparkListener()。onTaskEnd()但是那时我没有查询名称,taskEnd.taskMetrics().outputMetrics().recordsWritten()总是0,所以它不是一个选项。

    另一种方法是使用dataset.map()中的累加器来逐步计算它。但是,这不是一些书面记录,而是要写入的记录(如果下沉没有失败)。

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

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

1 个答案:

答案 0 :(得分:0)

a bug in FileStreamSink在版本2.3.1中已修复。

作为解决方法,在映射函数中使用accumulators来在写入接收器之前对记录数进行计数。