Apache flink Flink:如何在一次转换中处理和输出两个数据集?

Apache flink Flink:如何在一次转换中处理和输出两个数据集?,apache-flink,Apache Flink,join和coGroup转换可以读取2个输入数据集并输出一个(“Y”通量)(如果我错了,请纠正我) 我想处理和更新2个数据集。为此,我计划使用2个coGroup转换 但是,出于性能目的,这两种转换能否在单个转换(“H”通量)中完成 此外,随着数据集的更新,我想对它们进行迭代。如果当前不可能,您是否计划在将来支持此类转换?所有Flink DataSet运算符都只支持一个输出,但一个运算符的输出可以由以下两个或更多运算符使用 有两种方法可以解决您的问题: 使用单个CoGroup计算两个输出的结果,并

join和coGroup转换可以读取2个输入数据集并输出一个(“Y”通量)(如果我错了,请纠正我)

我想处理和更新2个数据集。为此,我计划使用2个
coGroup
转换

但是,出于性能目的,这两种转换能否在单个转换(“H”通量)中完成


此外,随着数据集的更新,我想对它们进行迭代。如果当前不可能,您是否计划在将来支持此类转换?

所有Flink DataSet运算符都只支持一个输出,但一个运算符的输出可以由以下两个或更多运算符使用

有两种方法可以解决您的问题:

  • 使用单个CoGroup计算两个输出的结果,并添加两个过滤器,过滤掉两个输出之一的记录。如果两个输出具有不同的数据类型,则需要计算返回值,如
    Tuple2
    。此解决方案看起来像:
  • 输入1--\/-->过滤器\输出1 共群 输入2--/\-->过滤器\输出2
  • 对分组键上的两个CoGroup输入进行分区和排序,并调用两个单独的CoGroup。每个协同组计算一个输出。通过在CoGroup之前对数据进行排序,可以重用分区和排序。重要提示:所有运算符必须使用相同的并行性 输入1-->分区哈希-->排序分区-\-/->CoGroup1-->输出1 X 输入2-->分区哈希-->排序分区-/-\->CoGroup2-->输出2
    关于迭代,请看一下Flink的。

    感谢Fabian的回答和示例。 input1--\ /--> Filter_output1 CoGroup input2--/ \--> Filter_output2 input1 --> PartitionHash --> SortPartition -\-/-> CoGroup1 --> Output1 X input2 --> PartitionHash --> SortPartition -/-\-> CoGroup2 --> Output2