[英]How to convert PCollection<TableRow> to PCollection<Row> in 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(...);
我需要找出:
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.