簡體   English   中英

如何區分兩個 PCollection Apache Beam

[英]How to diff two PCollection Apache Beam

我是 Apache Beam 的新手。

基本上,我有兩個 PCollection,每個都包含一些 DataRecords,其定義為:

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

每條記錄都有一個 id 和一些數據字段。

我有兩個 PCollection:

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

我需要找出:

  • p1 中存在但 p2 中不存在的 DataRecords
  • p2 中存在但 p1 中不存在的 DataRecords

DataRecord 只能通過其 id 字段來區分。

到目前為止我所做的是將兩個 PCollection 實例轉換為 PCollection<KV<String, DataRecord>>,我現在有:

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

但是,因為 PCollection 不允許按鍵訪問,所以我不知道如何像我們通常在 Java 中那樣區分這兩個映射。

有人能指出我正確的方向嗎?

您可以為您的用例更簡單地實現它,而無需那里存在間接層:

  • 使用CoGroupByKey收集具有相同 id 的元素
  • 在結果上使用ParDo來過濾僅出現在pkv1中的元素

實際上,在 Beam SQL 代碼庫中確實有代碼可以執行此操作,但您可以針對您的用例更簡單地執行此操作,而無需太多間接。

最有效的實施將取決於 collections 的大小以及可能命中的元素數量。 另一種嘗試的算法是

  • 使用View.asMap()pkv2生成查找表
  • pkv1 ParDo map 作為側輸入並過濾掉出現在 map 中的元素

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM