java - 使用 Apache Beam 查找 2 个列表的笛卡尔积
问题描述
我有 2PCollection
秒:
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 的笛卡尔积?
但这是使用具有 2 个输出的 coGroupby 处理 KV。coGroupby 有可能用于创建 2 个列表的笛卡尔积,但我没有看到它。
解决方案
看起来你在每个 PCollection 中都有一个元素,所以你只需要加入这些元素,然后你就可以在 DoFn 中自己做笛卡尔积
就像是
Flatten.pcollections(ListA, List)
.apply(WithKeys.of(null))
.apply(GroupByKey.create())
之后,您将拥有一个包含单个元素的 PCollection,即 KV(null, Iterable(ListA, ListB)),您可以使用一些 for 循环生成笛卡尔积。
推荐阅读
- stm32 - 使用显示总线接口将 TFT 屏幕与 STM32F446 连接
- python - Bytes 对象到数据框的列表
- android - 在 Android 项目上找不到证书路径的信任锚
- python - DRF Serializer 如何序列化我的数据并显示
- javascript - 更改后的反应状态未呈现
- python - Azure servicebus python - 如何发送一堆消息
- java - 使用我的 BufferedReader 在 while 循环中发出问题
- python-3.x - 不需要的反斜杠 ("\") 出现在字符串中
- amazon-web-services - 移动到 ipv6 后,AWS Ec2 ping 不起作用
- python - 上传和播放视频烧瓶的问题?