繁体   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