Flink中的LeftOuterJoin(JAVA API)

时间:2016-10-13 19:11:26

标签: java mapreduce apache-flink bigdata

我正在尝试在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。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

这是左外连接的预期行为。

鉴于您的程序,左外连接在两种情况下调用JoinFunction

  1. 如果两个输入input1input2都包含具有相同连接键的记录,则会为此密钥的笛卡尔积的每个元素调用join()
  2. 如果左侧输入input1包含右侧输入中不存在的键的记录(input2),则使用此键{的每个记录调用join()正确输入{1}}和input1
  3. 您应该为null添加in2 == null支票。

相关问题