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