![](/img/trans.png)
[英]How to calculate the number of elements of a PCollection in Apache beam
[英]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.