8

join および coGroup 変換は、2 つの入力データセットを読み取り、1 つを出力できます("Y" フラックス) (間違っている場合は訂正してください)。

2 つのデータセットを処理および更新したいと考えています。これを行うには、2 つのcoGroup変換を使用する予定です。

しかし、パフォーマンス上の理由から、これら両方の変換を 1 つの変換("H" フラックス)で行うことはできますか?

また、データセットが更新されたら、それらを繰り返し処理したいと思います。現在それが不可能な場合、将来的にこの種の変革をサポートする予定はありますか?

4

1 に答える 1

7

すべての Flink DataSet オペレーターは単一の出力のみをサポートしますが、オペレーターの出力は 2 つ以上の後続のオペレーターによって消費される可能性があります。

問題を解決するには、次の 2 つの方法があります。

  1. 単一の CoGroup を使用して両方の出力の結果を計算し、両方の出力のいずれかのレコードを除外する 2 つのフィルターを追加します。両方の出力のデータ型が異なる場合は、次のような戻り値を計算する必要がありますTuple2<FirstType, SecondType>。このソリューションは次のようになります。
    input1--\ /--> Filter_output1
              共同グループ
    input2--/ \--> Filter_output2
  1. グループ化キーで両方の CoGroup 入力を分割およびソートし、2 つの個別の CoGroup を呼び出します。各 CoGroup は 1 つの出力を計算します。CoGroup の前にデータをソートすることで、パーティショニングとソートを再利用できます。重要なのは、すべての演算子が同じ並列処理を使用する必要があることです!
    input1 --> PartitionHash --> SortPartition -\-/-> CoGroup1 --> Output1
                                                 バツ
    input2 --> PartitionHash --> SortPartition -/-\-> CoGroup2 --> Output2

反復に関しては、Flink の反復演算子を見てください。

于 2015-08-18T10:42:37.040 に答える