我有一個Pig作業,每天運行一些用戶帳戶,每個用戶每天都有一些交易。作爲該過程的一部分,該PIG寫出用戶每天分組的事務(作爲使用Avro的旁路)。在連接的PIG輸入文件中合併相似的組
我現在想要將每個用戶帳戶和流程的所有交易分組在一起(或更長時間)。
我可以通過在PIG中的蠻力做到這一點,但似乎必須有更好的辦法,而不是將所有交易進行扁平化和重新分組。更詳細地說...
起點適用...(a是用戶,(b,c)和(d,e)表示兩個轉換,如do(f,g)和(h,i)
我讀...
(a,{(b,c),(d,e)}) -- From first file - Monday
(a,{(f,g),(h,i)}) -- from second file - Tuesday
我想...
(a,{(b,c),(d,e),(f,g),(h,i)})
我親近與腳本...
-- Read in multiple days (one day per file, $input is directory with all files)
DayGroupedRecord = LOAD '$input' USING AvroStorage();
FlattenRecord = FOREACH DayGroupedRecord GENERATE $0 AS Key, FLATTEN ($1);
WeeklyGroup = GROUP FlattenRecord BY $0;
這給
(a,{(a,b,c),(a,d,e),(a,f,g),(a,h,i)})
這是不夠好。然而,由於輸入記錄已經被分組,所以該組必須在每個事務級別上操作似乎效率低下。
PIG有沒有不同的方法(也許更有效),我將日常組分組然後平坦化?
我試圖(和失敗)與...
DayGroupedRecord = LOAD '$input' USING AvroStorage();
WeeklyGroupNested = GROUP DayGroupedRecord BY $0;
WeeklyGroup = FOREACH WeeklyGroupNested GENERATE FLATTEN($1);
集團化運作看起來很有希望...
(a,{(a,{(b,c),(d,e)}),(a,{(f,g),(h,i)})})
但我不能找出如何變平的內上面的包......腳本已經讓我回到了我開始的地方......我嘗試了許多變形,但沒有成功(主要是生成PIG錯誤)。
這就是我得到的和上面的腳本(而不是我想要的)。
(a,{(b,c),(d,e)})
(a,{(f,g),(h,i)})
作爲Newbe豬,我可以得到豬扁平化的內袋,並得到接近我想要的:
(a,{(b,c),(d,e),(f,g),(h,i)})
菲爾