apache beam python sdk是否可以进行状态处理?

时间:2018-08-19 16:10:28

标签: python tensorflow google-cloud-dataflow apache-beam stateful

我一直在关注Timely (and Stateful) Processing with Apache Beam文章,尽管内容详尽且写得很好,但并未指定如何使用python实现相同的目的。进一步来说 它指出:

  

Beam的Python SDK尚不支持状态和计时器。

虽然没有说明原因,但...有天生的原因为什么这不可能?

我希望为我打算实现的信号处理系统实现一个重放缓冲区/窗口系统。因此,使用最新的窗口不断更新长度为W的特征的滑动窗口/历史帧缓冲区。

在Java中,其实现如下所示:

静态类FeatureFrameBuffer扩展了DoFn,FeatureFrame> {         整数bufferSize;

    public FeatureFrameBuffer(Integer bufferSize) {
        this.bufferSize = bufferSize;
    }

    @StateId("buffer")
    private final StateSpec<BagState<KV<String, Double>>> bufferedFeatures = StateSpecs.bag();

    @StateId("count")
    private final StateSpec<ValueState<Integer>> countState = StateSpecs.value();

    @ProcessElement
    public void process(
                        ProcessContext context,
                        @StateId("buffer") BagState<KV<String, Double>> bufferState,
                        @StateId("count") ValueState<Integer> countState
                        ) {

        int count = firstNonNull(countState.read(), 0);
        count = count + 1;
        countState.write(count);
        bufferState.add(context.element());

        // Only output buffer if count is greater than bufferSize
        // Remove last element from buffer if count
        // greater than or equals buferSize
        if (count >= bufferSize) {
            bufferState.read();
            createFeatureFrame();
            context.output(featureFrame);
            bufferState.clear();
            countState.clear();
        }
    }
}

我想知道在开始开发自定义实现之前,是否可以使用python sdk实现相同的功能。关于此事的一些建议会很棒。

2 个答案:

答案 0 :(得分:2)

到目前为止,Python SDK对状态处理的支持仍然是一个悬而未决的问题。参见https://issues.apache.org/jira/browse/BEAM-2687,并且被this票证阻止:“实施Beam Python用户状态和计时器API”,但是该票证正在积极进行中。

答案 1 :(得分:2)

从Beam版本2.9.0开始,用户状态和计时器可用。该文档尚未更新。