我想在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。
提前感谢您的帮助!
1条答案
按热度按时间wribegjk1#
这是左外部联接的预期行为。
给定你的程序,左外连接调用
JoinFunction
在两种情况下:如果两个输入,
input1
以及input2
,具有具有相同联接键的记录,join()
为该键的笛卡尔积的每个元素调用。如果左输入,
input1
,具有右输入中不存在的键的记录(input2
),join()
为每个记录调用input1
以及null
正确的输入。您应该为添加支票
in2 == null
给你的JoinFunction
.