apache flink数据集差/减运算

but5z9lq  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(628)

我目前正尝试在apachespark和apacheflink中实现一些算法。在执行算法时,我必须做一些集差/减法运算。
虽然有一个内置的 subtract 对于apachespark操作,我在apacheflink(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)
}
}

但我想知道这是否是正确的方法,甚至是最佳实践,或者有人知道更有效的方法吗?
6vl6ewon

6vl6ewon1#

dataset api不提供方法,因为它只包含非常基本的操作集。1.1中的表api将有一个set减号运算符。您可以在这里看到它是如何实现的。

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

使用此cogroupfunction。所以是的,你走对了方向。

相关问题