簡體   English   中英

使用Apache Beam在導入和全局數據庫中查找重復項

[英]Find duplicates inside of import and a global database with Apache Beam

目標

我的任務是在導入文件中查找重復條目,並在以后的階段中將這些導入文件的重復條目與全局數據庫進行比較。 文件中的數據是個人信息,例如姓名,電子郵件,地址等。數據並不總是完整的,並且通常拼寫不正確。

這些文件將由外部用戶通過Web表單上載。 完成該過程后,需要通知用戶,並且他/她必須能夠下載結果。

除了解決此任務外,我還需要評估Apache Beam對於此任務的適用性。

可能的解決方案

我在考慮以下問題:將導入文件上載到S3,並且管道將以pub-sub事件(Kafka隊列)的形式獲取文件位置,或者監視S3(如果可能)以獲取傳入文件。

然后,通過一個PTransform讀取文件,並將每一行推入一個PCollection中。 作為輔助輸出,我將更新搜索索引(在Redis或類似的內部)。 下一個轉換將訪問搜索索引,並嘗試查找匹配項。 將最終結果(唯一值,重復值)寫入到S3的輸出文件中,並為下一次導入清除索引。

問題

  • 這種方法有意義嗎?Beam習慣嗎?
  • Beam是否適合此處理?
  • 以上有什么改進建議嗎?
  • 我需要跟蹤文件名/ ID才能在最后通知用戶。 我如何通過管道移動此元數據。 我是否需要為元數據和有效負載創建一個“信封”對象,並在我的PCollection中使用該對象?
  • 傳入文件是無界的,但是文件內容本身是有界的。 有沒有辦法以慣用的方式找出文件處理的結束?

這種方法有意義嗎?Beam習慣嗎?

這是一個主觀的問題。 通常,我會說不,這對Apache Beam來說並不是慣用的。 Apache Beam是用於定義ETL管道的框架。 Beam編程模型沒有用於刪除重復數據的意見或內置功能。 通過實施(您編寫的業務邏輯代碼)或數據存儲的功能(UNIQUE約束,SQL中的SELECT DISTINCT或鍵/值存儲)來實現重復數據刪除。

Beam是否適合此處理?

是的,Beam適合。

以上有什么改進建議嗎?

我不建議在管道中間寫入搜索索引。 通過執行此操作,然后嘗試在以下轉換中讀回數據,您已經在DAG中有效地創建了一個循環。 管道可能會遇到競爭狀況。 擁有兩個單獨的管道不太復雜-一個管道寫到搜索索引(重復數據),另一個管道寫回S3。

我需要跟蹤文件名/ ID才能在最后通知用戶。 我如何通過管道移動此元數據。 我是否需要為元數據和有效負載創建一個“信封”對象,並在我的PCollection中使用該對象?

是的,這是一種方法。 我相信您可以通過ReadableFile類獲取文件元數據。

傳入文件是無界的,但是文件內容本身是有界的。 有沒有辦法以慣用的方式找出文件處理的結束?

我不確定該如何做,但我認為這對於以流模式執行的管道是不可能的。

暫無
暫無

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

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