2015-02-10 85 views
3

我有一個大數據文件(1TB)的數據導入到BigQuery。每行包含一個鍵。在導入數據並創建我的PCollection以導出到BigQuery時,我想確保不會根據此鍵值導入重複記錄。在我的Java程序中做這件事最有效的方法是什麼?使用數據流刪除重複

感謝

回答

2

在數據流GroupByKey概念允許任意分組,它可以被利用來從PCollection刪除重複項。

最通用的辦法解決這個問題將是:從源文件中讀取

  • ,產生的輸入記錄的PCollection,
  • 使用帕爾多轉變爲獨立的鍵和值,產生 PCollection KV的,
  • 在其上執行一個操作GroupByKey ,產生KV>的PCollection,
  • 使用帕爾變換選擇哪個值映射到給定的密鑰 小號HOULD被寫入,從而產生的KV PCollection,
  • 使用帕爾變換對數據進行格式化用於寫入,
  • 最後,寫 結果至BigQuery或任何其他接收器。

其中的一些步驟可以省略 ,如果你要解決的一般 問題的特定特例。

特別是,如果整個記錄被認爲是一個關鍵,那麼問題可以簡化爲只運行Count變換並遍歷生成的PCollection。

下面是一個近似的代碼示例GroupByKey:

PCollection<KV<String, Doc>> urlDocPairs = ...; 
PCollection<KV<String, Iterable<Doc>>> urlToDocs = 
    urlDocPairs.apply(GroupByKey.<String, Doc>create()); 
PCollection<KV<String, Doc>> results = urlToDocs.apply(
    ParDo.of(new DoFn<KV<String, Iterable<Doc>>, KV<String, Doc>>() { 
     public void processElement(ProcessContext c) { 
     String url = c.element().getKey(); 
     Iterable<Doc> docsWithThatUrl = c.element().getValue(); 
     // return a pair of url and an element from Iterable<Doc>. 
    }})); 
+0

嗨 - 我能得到RemoveDuplicates變換正常工作。我想知道將數據流報告中的重複項數量抑制或作爲多重輸出重複項的關鍵字會涉及什麼? – 2015-03-06 18:31:01