flink中的leftouterjoin(java api)

aiqt4smr  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(440)

我想在Flink做一个左外角。我不尝试自己实现leftouterjoin,因为它是通过cogroupfunction完成的:https://gist.github.com/mxm/c2e9c459a9d82c18d789
我正在尝试使用flatjoinfunction:

public static final class leftOuter implements FlatJoinFunction<Tuple3<String,String,String>, Tuple2<String,String>, Tuple2<String,String>>{

    @Override
    public void join(Tuple3<String, String, String> in1,
            Tuple2<String, String> in2,
            Collector<Tuple2<String, String>> out) throws Exception {
        // TODO Auto-generated method stub
        out.collect(new Tuple2<String,String>(in1.f0, in2.f1 == null ? "null" : in2.f1));

    }

}

我把这个函数称为:

input1.leftOuterJoin(input2).where(0)
            .equalTo(1)
            .with(new leftOuter());

不幸的是,我在out.collect行中得到了一个nullpointerexception。
提前感谢您的帮助!

wribegjk

wribegjk1#

这是左外部联接的预期行为。
给定你的程序,左外连接调用 JoinFunction 在两种情况下:
如果两个输入, input1 以及 input2 ,具有具有相同联接键的记录, join() 为该键的笛卡尔积的每个元素调用。
如果左输入, input1 ,具有右输入中不存在的键的记录( input2 ), join() 为每个记录调用 input1 以及 null 正确的输入。
您应该为添加支票 in2 == null 给你的 JoinFunction .

相关问题