2016-08-04 2 views
1

データセットのデータ量を削減するために使用することができます。新しいバージョンのユーザーには新しい名前が付いていますが、nice_idは決して変更されません。ページの新しいバージョンには新しいpage_namesが付けられ、クリックは変更されませんが、クリックのpage_nameが変更されると新しいoutput_clickが必要です。は一度発射トリガーは

したがって、すべての入力要素でトリガされたグローバルウィンドウでpage_idのクリックとページの間にCoGroupByKeyがあり、そのページのすべてのクリックを再発行しますが、同様のグローバルウィンドウと共同グループ化がある場合、 user_idをキー入力し、すべての要素のnice_idをクリックするたびにユーザーが変更したとき、または新しいクリックを行うたびに、ユーザーが再発するすべてのクリックを取得します。それは多くの余分なデータになるでしょう。

私が考えているのは、user_idのグループ共通キーの後に、click_idのキーごとに1回だけトリガーするトリガーを持つ新しいグローバルウィンドウ、本質的に何もしないParDo group-by-keyが起こるようにしてから、すべての要素に対して起動するグローバルウィンドウを再確立してから、page_idのキーごとにグループ化された結果の出力に戻って結合します。これはうまくいくようですか?しかし、また、ちょっとだけ複雑なようです。私は下の図を描こうとしました。一度だけ発射トリガーと新しいデータに繰り返し O.Window =グローバル・ウィンドウを起動トリガと

+-------+ +--------+ +------+ |Pages | | Clicks | | Users| +---+---+ +---+----+ +--+---+ | | | +---v----+ +---v----+ +---v----+ |R.Window| |R.Window| |R.Window| +------+-+ +---------+ ++-------+ | | | | +----v---v+ +v-----v---+ |CoGroupBy| |CoGroupBy | |page_id | |user_id |<-- also ParDo that outputs click_id,nice_id mapping +-------+-+ +------+---+ | | | +---v----+ | |O.Window| | +---+----+ | | | +----v---+ | |GroupBy | | |click_id| | +----+---+ | | | +----v--+ | |nothing| | |Pardo | | +---+---+ | | | +----v---+ | |R.Window| | +-+------+ | | +---v------------v+ | CoGroupBy | | click_id | +-------+---------+ | v Output

R.Window =グローバルウィンドウ。

答えて

1

私はそれがうまくいくとは思わない。キーのCoGroupByUserIdを介して最初に取得されたものは処理されますが、その後のすべてのレコードは破棄されます。

CoGroupByKeyを使用する代わりに、FlattenとCombinePerKeyをカスタムCombineFnで使用することをお勧めします。 CombineFnはアキュムレータに状態を保持します(ウィンドウトランスフォームで.accumulatingFiredPanesを使用するようにしてください)。そして、新しいユーザー名がある場合にのみ要素を放出するように選択できます。

(サイドノート:あなたは「何もパルド」を必要としません。ただGBKで十分です)

+0

私は少し省略、私はおそらく必要はありません。 CoGroupByUserIdの後にParDoがあり、ユーザーとクリックの両方が存在するレコードのみを出力します。また、私たちはuser_nameを使用せず、nice_idをgeに接続しています。新しいnice_idはありません。ユーザーのnice_idは定数で、クリックのユーザーは決して変更できません。 – bfabry

+0

また、後続のすべてのレコードが削除されるとは限りません。* audit_id *ごとに後続のすべてのレコードのみが削除されますか? – bfabry

+0

私はCombinePerKeyとCombineFnをもう一度読まなければならないでしょう。そのような重複/不要な更新を削除するためにそれらを使用する方法はありませんでした。それはhttp://stackoverflow.com/posts/comments/64043061?noredirect=1への潜在的な回答でしょうか? – bfabry

関連する問題