Flink:如何在单个转换中处理和输出两个数据集?

时间:2015-08-18 08:30:48

标签: apache-flink

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

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

但是,出于性能目的,这些转换是否可以在一个(" H" flux)中完成?

此外,随着数据集的更新,我想迭代它们。如果目前无法实现,您是否计划在未来支持这种转型?

1 个答案:

答案 0 :(得分:7)

所有Flink DataSet运算符仅支持单个输出,但运算符的输出可由两个或多个后续运算符使用。

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

  1. 使用单个CoGroup计算两个输出的结果,并添加两个过滤器,用于过滤掉两个输出之一的记录。如果两个输出都有不同的数据类型,则需要计算类似Tuple2<FirstType, SecondType>的返回值。此解决方案如下所示:
  2.     input1--\         /--> Filter_output1 
                  CoGroup 
        input2--/         \--> Filter_output2
    
    1. 对分组键上的两个CoGroup输入进行分区和排序,并调用两个单独的CoGroup。每个CoGroup计算一个输出。通过在CoGroup之前对数据进行排序,可以重用分区和排序。重要的是,所有运营商必须使用相同的并行性!
    2.     input1 --> PartitionHash --> SortPartition -\-/-> CoGroup1 --> Output1
                                                       X
          input2 --> PartitionHash --> SortPartition -/-\-> CoGroup2 --> Output2
      

      关于迭代,请查看Flink的iteration operators