Apache Beam-如何在Python中按键将PCollection分为2个

时间:2018-12-06 08:47:07

标签: python apache-beam

假设我们有2个PCollections:

PCollection 1:

[<ID_1, some_data>, <ID_2, some_data>, ... <ID_5, some_data>]

PCollection 2:

[<ID_2>, <ID_5>]

两个PCollections都是有界的,但可能很大(因此,最好不要使用侧面输入)。

假设我们要将PCollection1分成2个,这取决于ID_x是否存在于PCollection 2中,即一个PCollection将具有 [<ID_1, some_data>, <ID_3, some_data>, <ID_4, some_data>]和另一个[<ID_2, some_data>, <ID_5, some_data>]。如何实现呢?

似乎Partition转换是可行的方法,但我不知道该怎么做。

但是,我正在使用Python。

1 个答案:

答案 0 :(得分:1)

Partition将允许您根据运行时应该计算的标准将一个PCollection实际分成多个,因此从理论上讲,它可以用于此目的。但在您的情况下,条件是“ pcollection_of_ids中存在ID”。因此,您需要或多或少有效地执行此检查。

我不认为有一个确定的解决方案,这取决于您的设置和数据的细节。例如。输入PCollections有多大?或者,如果您在pcollection1中没有匹配的ID的情况下在pcollection_of_ids中收到了一个元素,但是在您分割输入之后,匹配的ID出现了,该怎么办?或者,您可以将ID预加载到某些服务中以进行有效的键/值查找吗?还是在ID进入时将其保存到单独的并行管道中的此类服务中?