我正在尝试在Flink中做一个LeftOuterJoin。 我不会尝试自己实现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。
提前感谢您的帮助!
答案 0 :(得分:2)
这是左外连接的预期行为。
鉴于您的程序,左外连接在两种情况下调用JoinFunction
:
input1
和input2
都包含具有相同连接键的记录,则会为此密钥的笛卡尔积的每个元素调用join()
。input1
包含右侧输入中不存在的键的记录(input2
),则使用此键{的每个记录调用join()
正确输入{1}}和input1
。您应该为null
添加in2 == null
支票。