使用 Apache Beam 查找 2 个列表的笛卡尔积

2024-03-20

我有2个PCollections:

PCollection<List<String>> ListA =
        pipeline.apply("getListA", ParDo.of(new getListA()))
PCollection<List<String>> ListB =
        pipeline.apply("getListB", ParDo.of(new getListB()))

ListA包含:

["1","2","3"]

ListB包含:

["A","B","C"]

我如何最终得到一个PCollection其中包含:

[
 ["A","1"],["A","2"],["A","3"],
 ["B","1"],["B","2"],["B","3"],
 ["C","1"],["C","2"],["C","3"],
]

我的搜索指向我:

如何在Dataflow中对两个PCollection进行笛卡尔积? https://stackoverflow.com/questions/41050477/how-to-do-a-cartesian-product-of-two-pcollections-in-dataflow

但这是使用 coGroupby 和 2 个输出来处理 KV。 coGroupby 可能可用于创建 2 个列表的笛卡尔积,但我没有看到它。


看起来每个 PCollection 中都有一个元素,因此您只需加入这些元素,然后您可以在 DoFn 中自己进行笛卡尔积

就像是

Flatten.pcollections(ListA, List)
.apply(WithKeys.of(null))
.apply(GroupByKey.create())

之后,您将拥有一个包含单个元素的 PCollection,该元素是 KV(null, Iterable(ListA, ListB)),并且您可以使用一些 for 循环生成笛卡尔积。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Apache Beam 查找 2 个列表的笛卡尔积 的相关文章

随机推荐