我正在尝试找到一种方法,可以使用Flink Left Outer Join将数据集的两个值与另一个数据集的一个值进行检查?
final DataSet<type> finalDataSet = dataSet1
.leftOuterJoin(dataSet2)
.where("value1")
.equalTo("value2")
.with(new FunctionNameToBeImplemented())
.name("StepName");
这对于一对一检查是很好的。
有没有办法做类似的事情:
final DataSet<type> finalDataSet = dataSet1
.leftOuterJoin(dataSet2)
.where(["value1","value2"]) // List of values
.contains("value2")
.with(new FunctionNameToBeImplemented())
.name("StepName");
我希望输出先检查value1,然后再对value2进行检查,如果有(或两者)匹配,请将其传递给函数“ FunctionNameToBeImplemented()”以进行进一步处理。
答案 0 :(得分:0)
Flink的DataSet API中的外部联接严格是相等联接。
您可以使用两个单独的联接来实现您的用例,并合并结果。为了避免重复,连接函数中的一个应检查是否也适用其他条件,并且仅在不满足条件时才产生结果。
left -\
> JOIN(l.val1 == r.val2)[emit result] ---------------------\
right -/ \
> UNION
left -\ /
> JOIN(l.val2 == r.val2)[emit result if l.val1 != r.val2) -/
right -/