簡體   English   中英

Apache-Beam將序列號添加到PCollection

[英]Apache-Beam add sequence number to a PCollection

我正在嘗試建立一個ETL以加載維度表。 我用Python和DataFlow和BigQuery分配Apache Bea。

我需要為pcollection的每個元素分配一個序列號,以便將其加載到BigQuery中,但是我找不到任何方法來做到這一點。

我想我需要DataFlow進行先前的聚合並加入以獲取最終的pcollection以添加序列號,但是在這一刻,我需要停止並行處理並將pcollection轉換為列表(如在使用Spark時使用.collect( )),然后進行簡單的循環來分配序列號。 這樣對嗎?

這是我編寫的管道:

p | ReadFromAvro(known_args.input) | beam.Map(adapt) | beam.GroupByKey() | beam.Map(adaptGroupBy) 

我讀過沒有辦法從pcollection獲取列表: 如何Google Dataflow的PCollection中獲取元素列表,並在管道中使用它來循環編寫轉換?

我該如何實現? 有什么幫助嗎?

如果要獲取包含PCollection每個元素的PCollection ,則可以使用側面輸入。 請記住,這將消除結果中的所有並行性,並且管道可能會變慢。

如果您仍然想這樣做,那么:

side_input_coll = beam.pvalue.AsIterable(my_collection)

(p 
 | beam.Create([0]) 
 | beam.FlatMap(lambda _, my_seq: [(elem, i) for i, elem in enumerate(my_seq)],
               my_seq=side_input_coll))

但是不要忘記,要保留並行性,最好只生成一個隨機ID。 請記住, PCollections本質上是無序的。

要了解有關側面輸入的更多信息,請參見側面輸入上光束編程指南。

暫無
暫無

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

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