[英]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
, 請參閱文檔;csvField[0] + "," + csvField[3]
GroupByKey
PTransform
按新鍵對記錄進行PTransform
, 請參閱此文檔;ParDo
(屬於同一客戶和交易類型的所有記錄),匯總金額,輸出記錄與總和; 最后兩個步驟 (GBK+ParDo) 可能可以通過使用Combine.perKey()
PTransform
,它執行相同的操作,但可以通過運行時進行優化。 有關更多信息,請參閱此和此。
您還可以查看 Beam SQL,它允許您在 SQL 中表達相同的邏輯。 有關 Beam SQL 概述,請參閱此文檔。 在這種情況下,您需要添加一個ParDo
,在應用SqlTransform
之前將 CSV 記錄轉換為 Beam Rows。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.