簡體   English   中英

側輸入數據未更新 - Python Apache Beam

[英]Side Input data doesn't get updated - Python Apache Beam

我正在構建一個包含動態配置數據的管道,只要被觸發就會更新。

有 2 個 PubSub 主題,主題 A 用於 IoT 數據,主題 B 用於將用於轉換 IoT 數據的配置。

配置保存在 Cloud Firestore 中。 當數據庫更新時,雲 Function 將讀取更新后的配置並將其發送到 PubSub 主題 B。

問題是數據流作業只在作業開始時讀取配置數據,永遠不會更新。

我該怎么做才能更新側面輸入?

p = beam.Pipeline(options=options)

class Transform(beam.DoFn):
    def process(self, configuration):
        ...
        yield output

def run():
    ...
    iot_data = (p
        | 'ReadIotData' >> ReadFromPubSub(TOPIC_A)

    configuration = (p
        | 'ReadConfig' >> ReadFromPubSub(TOPIC_B)
        | 'WindowUserData' >> beam.WindowInto(
            window.GlobalWindows(),
            trigger=trigger.Repeatedly(trigger.AfterCount(1)),
            accumulation_mode=trigger.AccumulationMode.DISCARDING)
        | 'JsonLoadsUserData' >> beam.Map(lambda x: ('data', x.decode().replace('\\','')))

    output = (iot_data
        | 'transform' >> beam.ParDo(Transform(),
            beam.pvalue.AsDict(configuration))
        | 'Output' >> WriteToPubSub(TOPIC_C)

我會嘗試使用https://cloud.google.com/dataflow/docs/guides/deploying-a-pipeline#dataflow-runner-v2運行此管道,它更好地支持側輸入。

我最近做了一個類似的問題,它在 Directrunner 中不起作用,但在 Dataflow runner 中運行良好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM