You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by 陈卓宇 <25...@qq.com.INVALID> on 2021/11/23 12:28:35 UTC

空指针异常

我在flink流的外部定义了一个HashMap<String,Metadata&gt; 值是一个元数据信息封装的java对象
在flink代码中:
SingleOutputStreamOperator<Row&gt; returns = tenv.toRetractStream(table, Row.class).map(new RichMapFunction<Tuple2<Boolean, Row&gt;, Row&gt;() {
    HashMap<String, Metadata&gt; metadataHashMap1 =metadataHashMap;
    @Override
    public Row map(Tuple2<Boolean, Row&gt; value) throws Exception {
        String[] split = finalColumn.split(",");
        for (int i = 0; i < split.length; i++) {
            if (value.f1.getField(i) == null) continue;
            Object fieldValue = value.f1.getField(i);
            Metadata metadata = metadataHashMap.get(fieldValue);
            value.f1.setField(i, metadata.getTag_value());
        }
        return value.f1;
    }
}).returns(rowTypeInfo);
发现这一行:
Metadata metadata = metadataHashMap.get(fieldValue);为null抛出空指针异常

Flink版本:1.12.5

同样的代码我在Flink:1.14.0中没有问题的(于上述区别将toRetractStream改为toDataStream和):
SingleOutputStreamOperator<Row&gt; returns = tenv.toDataStream(table, Row.class).map(new MapFunction<Row, Row&gt;() {
    @Override
    public Row map(Row value) throws Exception {
        String[] split = finalColumn.split(",");
        for (int i = 0; i < split.length; i++) {
            if (value.getField(i) == null) continue;
            Object fieldValue = value.getField(i);
            Metadata metadata = metadataHashMap.get(fieldValue);
            value.setField(i, metadata.getTag_value());
        }
        return value;
    }
})
        .filter(new FilterFunction<Row&gt;() {
    @Override
    public boolean filter(Row value) throws Exception {
        if (value.getField("_id") == null){
            return false;
        }
        return true;
    }
})

        .returns(rowTypeInfo);
returns.print("======&gt;");
陈


&nbsp;