簡體   English   中英

如何在 PCollection 中組合數據 - Apache Beam

[英]How to combine Data in PCollection - Apache beam

我正在尋找在 PCollection 中組合數據

輸入是一個CSV文件

customer id,customer name,transction amount,transaction type  
cust123,ravi,100,D  
cust123,ravi,200,D  
cust234,Srini,200,C  
cust444,shaker,500,D  
cust123,ravi,100,C  
cust123,ravi,300,C  

O/p 應該是

將文本文件讀入對象集合后,我想將其合並為顯示的輸出。

cust123,ravi,300,D  
cust123,ravi,400,C  
cust234,Srini,200,C  
cust444,shaker,500,D
Pipeline pipeline = Pipeline.create(
   PipelineOptionsFactory.fromArgs(args).withValidation().create());

PCollection< Customer> pCollection =
   pipeline.apply("Read", TextIO.read().from("MyFile.csv"))
           .apply("splitData and store",
               ParDo.of(new TextTransform.SplitValues()))

如果我理解正確,您需要對按客戶 ID+交易類型分組的交易金額求和。 在這種情況下,您需要從高層次的角度:

  • 將鍵分配給記錄:
    • 您可以WithKeys使用WithKeys PTransform請參閱文檔
    • 關鍵取決於您,例如您可以將客戶 ID 與交易類型結合起來,例如: csvField[0] + "," + csvField[3]
  • 使用GroupByKey PTransform按新鍵對記錄進行PTransform請參閱此文檔
  • GBK 的輸出將是具有相同鍵的記錄的集合,因此您需要應用接受此類集合的ParDo (屬於同一客戶和交易類型的所有記錄),匯總金額,輸出記錄與總和;

最后兩個步驟 (GBK+ParDo) 可能可以通過使用Combine.perKey() PTransform ,它執行相同的操作,但可以通過運行時進行優化。 有關更多信息,請參閱

您還可以查看 Beam SQL,它允許您在 SQL 中表達相同的邏輯。 有關 Beam SQL 概述,請參閱此文檔 在這種情況下,您需要添加一個ParDo ,在應用SqlTransform之前將 CSV 記錄轉換為 Beam Rows。

暫無
暫無

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

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