首页 > 解决方案 > Flink,如何使用可变对象(IntValue,LongValue,...)?

问题描述

假设我有 2 个平面图实现,

public class Foobar implements FlatMapFunction<Foo, Tuple2<String, Bar>> {
@Override
public void flatMap(Foo in, Collector<Tuple2<String, Bar>> out) throws Exception {
    String id = in.getId();
    if(!"bad_id".equals(id)) {
        Bar bar = ...; // some code to build Bar instance from Foo
        out.collect(new Tuple2<>(id, bar));
    }
}}



public class Foobar implements FlatMapFunction<Foo, Tuple2<String, Bar>> {
private Bar bar;
private Tuple2<String, Bar> t2 = new Tuple2<>();
private StringValue id = new StringValue();

@Override
public void flatMap(Foo in, Collector<Tuple2<String, Bar>> out) throws Exception {
    id.setValue(in.getId());
    if(!"bad_id".equals(id.getValue())) {
        bar = ...; // some code to build Bar instance from Foo
        t2.f0 = id.getValue();
        t2.f1 = bar;
        out.collect(t2);
    }
}}
  1. 从性能的角度来看,第二个更好吗?
  2. 这是使用StringValue的正确方法吗?
  3. 是否还需要将返回类型更改为 Tuple2<StringValue, Bar>,而不是 Tuple2<String, Bar>?

标签: javaapache-flink

解决方案


推荐阅读