2017-05-12 22 views
0

私はGoogle Dataflowを初めて使用しており、さまざまな言語のカタログに参加したいカタログデータを扱っています。今のところ、私のプロセスは両方の言語を自分自身で解析し、各言語のPCollectionを作成します。このPCollectionには、メタデータ、すべての記事、すべてのカテゴリを含む要素が1つ含まれています。モデルは複数の言語を保持する準備が整っています。私が今行う必要があるのは、それらの2つの要素(PCollections)をマージすることだけです。Google DataflowでPCコレクションをマージする

しかし、Google Dataflowのドキュメントでは、これらのコレクションを「手作業で」マージする方法の例は提供されておらず、適用時の入力には常に特定のInput-Typeが必要です。 私はPCollectionListを試しましたが、私がPCollectionsとそのエンティティを含むすべてのもので作業できる解決策を見つけることができません。それから私はCustom CombineFnを書いたが、それを適用する方法はわからないので、両方のコレクションが結合される。

私は2つのPCollection catalogCollection_deとcatalogCollection_frを持っています。これらをカスタム処理して1つのPCollectionを取得するにはどうすればできますか?

は、すべてのヘルプは非常に

EDITを高く評価している:「参加/マージ」は、この文脈で何を意味するのか疑問に。 PCollectionsオブジェクトは、メタデータ、カテゴリ、および記事を含むCatalogCollectionと呼ばれるPojoを保持します。それらのPojosのそれぞれは異なるテキストを持ち、各テキストはMap<LanguageKey, Description>で表されます。言語ごとに、このCatalogCollectionを保持するPCollectionがあります。私はそれらを結合/結合したいとき、私は1つのPCollectionですべての言語を集めたいと思っています。例えば、それぞれのArticleで、対応するArticleを他の言語で見つけ、すべての記述を最初にコレクションでは、最終的にすべての言語を収集する必要があります。

+0

ここで実際にマージするものについて詳しく説明できますか?一般的に、単一要素のPCollectionを持つことはパラレル化できません。記事のPCollection、カテゴリのPCollectionなどを持つ方が良いでしょう。それぞれの記事は、それが含まれていた言語でキーイングされている可能性があります。 –

+0

+1はBenと言っています。 CoGroupByKey変換を使用してコレクションをキーで結合します。 (おそらく、結合はあなたがマージした意味ですか?) – jkff

+0

質問が更新されました – user2122552

答えて

0

私のUsecaseでは、SideInputでParDoを使用し、手動で(私のデータ構造のために)PoJosに参加していたようです。また更新されたパイプラインでは、PCollectionsがArticles/Categoriesなどに分割されています。私はそれらをカスタムマージしなければなりませんでした。 問題は、Datastoreからの読み取りは機能しませんが、別のスレッドでの読み取りです。

1

あなたが探している変換はFlattenです:

PCollection<String> pc1 = ...; 
PCollection<String> pc2 = ...; 
PCollection<String> pc3 = ...; 
PCollectionList<String> pcs = PCollectionList.of(pc1).and(pc2).and(pc3); 
PCollection<String> merged = pcs.apply(Flatten.<String>pCollections()); 

も注意してください。私はあなたのデータフローは、並列のために、労働者全体の要素を配布するので、あなたはまた、問題に実行することが示唆「このコレクションは、一つの要素が含まれている」と述べた気づきました処理。要素だけでは、あなたが期待する並列処理の利点が得られないことがあります。

+0

しかし、それは私が平坦化操作をカスタマイズすることができないようです。データフローはどうすればよいのか分かりますか? – user2122552

+0

結果をJson-Stringに解析すると、2つのコレクションを連結したように見えます。私はそれらをマージする必要があります – user2122552

+0

"マージ"はここで何を意味しますか? –

関連する問題