在 python 中的管道 运行 期间访问 Apache Beam 指标值?

Access Apache Beam metrics values during pipeline run in python?

我正在使用 Apache Beam Python SDK 的直接 运行ner 来执行类似于字数统计示例的简单管道。由于我正在处理一个大文件,我想在执行期间显示指标。我知道如何报告指标,但我找不到在 运行.

期间访问指标的任何方法

我在 PipelineResult 中找到了 metrics() 函数,但似乎我只从 Pipeline.run() 函数中得到了一个 PipelineResult 对象,这是一个阻塞调用。在 Java SDK 中我找到了一个 MetricsSink,它可以在 PipelineOptions 上配置,但我在 Python SDK 中没有找到一个等价物。

如何在管道执行期间访问实时指标?

direct runner 通常用于测试、开发和小型作业,Pipeline.run() 为简单起见被阻塞。在其他运行器上 Pipeline.run() 是异步的,结果可用于在执行期间监视管道进度。

您可以尝试 运行 像 Flink 这样的 OSS runner 的本地版本来获得这种行为。

这似乎适用于 DirectRunner:

counters = result.metrics().query(beam.metrics.MetricsFilter())['counters']
for metric in counters:
    print(metric)