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

zdwk9cvp  于 2021-06-24  发布在  Flink
关注(0)|答案(1)|浏览(434)

join和cogroup转换可以读取2个输入数据集并输出一个(“y”通量)(如果我错了请纠正我)。
我想处理和更新2个数据集。为此,我计划使用2 coGroup 转变。
但是,出于性能目的,这两种转换能否在单个转换(“h”流)中完成?
另外,随着数据集的更新,我想对它们进行迭代。如果目前无法实现,您是否计划在未来支持这种转变?

n3h0vuf2

n3h0vuf21#

所有的flink数据集操作符只支持一个输出,但是一个操作符的输出可以被后面的两个或更多操作符使用。
有两种方法可以解决您的问题:
使用一个cogroup来计算两个输出的结果,并添加两个过滤器,过滤掉两个输出之一的记录。如果两个输出都有不同的数据类型,则需要计算 Tuple2<FirstType, SecondType> . 此解决方案如下所示:

input1--\         /--> Filter_output1 
              CoGroup 
    input2--/         \--> Filter_output2

对分组键上的两个cogroup输入进行分区和排序,并调用两个单独的cogroup。每个cogroup计算一个输出。通过在cogroup之前对数据进行排序,可以重用分区和排序。重要的是,所有运算符必须使用相同的并行性!

input1 --> PartitionHash --> SortPartition -\-/-> CoGroup1 --> Output1
                                                 X
    input2 --> PartitionHash --> SortPartition -/-\-> CoGroup2 --> Output2

关于迭代,看看flink的迭代操作符。

相关问题