Apache Flink DataSet差异/减法操作

时间:2016-08-03 07:33:30

标签: apache-flink

我目前正在尝试在Apache Spark和Apache Flink中实现一些算法。执行算法时,我必须进行某种设置差异/减法操作。

虽然Apache Spark有一个内置的subtract操作,但我在Apache Flink(1.0.3和1.1.0-SNAPSHOT)中找不到类似的东西。

所以我的问题是,假设两个DataSet对象d1, d2都包含相同的类型T,那么应用集合差异的最有效方法是什么,即d1\d2

val d1: DataSet[T] = ...
val d2: DataSet[T] = ...
val d_diff: DataSet[T] = ???

可能通过coGroup

有一些方法
val d_diff = d1.coGroup(d2).where(0).equalTo(0) {
               (l, r, out: Collector[T]) => {
                val rightElements = r.toSet
                for (el <- l)
                  if (!rightElements.contains(el)) out.collect(el)
               }
             }

但我想知道这是否正确和最佳实践还是有人知道更有效率?

1 个答案:

答案 0 :(得分:2)

DataSet API不提供方法,因为它只包含非常基本的操作集。 1.1中的Table API将具有set minus运算符。您可以看到它的实施方式here

  leftDataSet
    .coGroup(rightDataSet)
    .where("*")
    .equalTo("*")
    .`with`(coGroupFunction)

使用this CoGroupFunction。所以是的,你走在正确的轨道上。