提问者:小点点

Apache Flink 数据集差分/减法操作


我目前正在尝试在Apache Spark和Apache Flink中实现一些算法。在执行算法时,我必须执行某种集合差分/减法运算。

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

所以我的问题是,给定两个数据集对象 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个答案

匿名用户

数据集 API 不提供方法,因为它只包含一组非常基本的操作。1.1 中的表 API 将具有一组减号运算符。您可以在此处查看它是如何实现的。

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

使用此协同组函数。所以是的,你走在正确的轨道上。