当前位置: 首页 > 知识库问答 >
问题:

如何区分两个PCollection Apache Beam

陆文博
2023-03-14

我是Apache Beam的新手。

基本上,我有两个PCollection,每个都包含多个DataRecords,定义为:

class DataRecord {
    private String id;
    .......
}

每条记录都有一个id和多个数据字段。

我有两个收藏:

PCollection<DataRecord> p1 = pipeline.apply(...);
PCollection<DataRecord> p2 = pipeline.apply(...);

我需要找出:

  • p1中存在但p2中不存在的数据记录

DataRecord只能通过其id字段进行区分。

到目前为止,我所做的是将两个PCollection实例转换为PCollection

PCollection<KV<String, DataRecord>> pkv1
PCollection<KV<String, DataRecord>> pkv2

然而,由于PCollection不允许通过键进行访问,我不知道如何像在Java中一样区分这两个映射。

有人能给我指出正确的方向吗?

共有1个答案

范承望
2023-03-14

您可以为您的用例更简单地实现它,而不需要间接层:

  • 使用CoGroupByKey收集具有相同id的元素
  • 对结果使用ParDo过滤仅出现在pkv1
  • 中的元素

在Beam SQL代码库中,实际上有一些代码可以做到这一点,但您可以针对您的用例更简单地完成这一点,而无需太多间接操作。

最有效的实现将取决于集合的大小以及有多少元素可能有命中。另一个要尝试的算法是

  • 使用查看。asMap()从pkv2生成查找表
 类似资料:
  • 我想知道Jsoup中是否有任何方法可以区分同一类中的多个元素。为了澄清,请考虑下面的HTML片段,我需要检索类名“description”,但我需要区分一个信息和另一个信息。 谢谢大家!

  • 首先,我是如何从通知中读取WhatsApp消息的? 嗯,我进行了研究,并且已经能够实现具有适当权限的(没有任何秘密策略),并且能够监听来自WhatsApp的通知消息。这家伙给了我这个主意,功劳要归功于他。 不管怎样,我现在可以阅读消息了,但问题是WhatsApp显然会多次发送同一条消息,但有时却不会显示多个通知。我怎么知道? 我记录了我的侦听器收到的通知,发现了几条相同的消息。通知的一般结构如下所

  • 问题内容: 有没有比以下更有效的方法: 问题答案: 在查询中使用PARTITION(partitionN)语法应该非常少见。 通常,您只想为分区键指定值,并允许Oracle执行分区消除。例如,如果您的表每天根据TRANSACTION_DATE进行分区 将从今天的分区,昨天的分区和前一天的分区中选择所有数据。

  • 我已经在c中创建了kafka消费者,并创建了一个具有10个分区的主题,当我尝试使用消费者读取数据时,它仅从2个分区读取,然后说没有更多的消息。我尝试使用这两种方法,即订阅和分配,但它们都不起作用。我应该如何将所有10个分区分配给单个使用者,这是将分区分配给使用者的正确方法吗?我已经使用此存储库构建了自定义消费者 https://github.com/edenhill/librdkafka/blob

  • 嗨,我正在使用Java Swing构建一个简单的标记工具。组件中有两个JList,每当我单击tagging按钮时,我都想给给定的文本添加一个标记。如果我的光标焦点在左边的JList上,我想修改左边的JList上的文本,如果是右边的,修改右边的。我所说的光标焦点是指我可以使用键盘箭头导航列表项的地方。 所以按钮监听器应该告诉当前光标焦点是在左边的Jlist上还是在右边的Jlist上。我该怎么做呢?我