![](/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.