Flink入门系列04-process function

process function 相对于前文所述的map、flatmap、filter算子来说,最大的区别是开发人员对数据的处理逻辑拥有更大的自由度。同时,ProcessFunction 继承了 RichFunction,因而具备了 open、close、getRuntimeContext等方法。

不同类型的datastream上,应用 process function 时,flink 提供了大量不同类型的 process function,让其针对不同的datastrean 拥有更具有针对性的功能。
在这里插入图片描述

  • 在普通的datastream上调用process算子,传入的是 ProcessFunction
SingleOutputStreamOperator<Tuple2<String, String>> s1 = stream1.process(new ProcessFunction<String, Tuple2<String, String>>() {
    // 可以使用  生命周期 open 方法
    @Override
    public void open(Configuration parameters) throws Exception {
        // 可以调用 getRuntimeContext 方法拿到各种运行时上下文信息
        RuntimeContext runtimeContext = getRuntimeContext();
        runtimeContext.getTaskName();

        super.open(parameters);
    }

    @Override
    public void processElement(String value, ProcessFunction<String, Tuple2<String, String>>.Context ctx, Collector<Tuple2<String, String>> out) throws Exception {

        // 可以做测流输出
        ctx.output(new OutputTag<String>("s1", Types.STRING),value);

        // 可以做主流输出
        String[] arr = value.split(",");
        out.collect(Tuple2.of(arr[0], arr[1]));
    }

    // 可以使用  生命周期close方法
    @Override
    public void close() throws Exception {
        super.close();
    }
});
  • 在 keyedStream上调用 process 算子,传入的是 KeyedProcessFunction
// 对s1流进行keyby分组
KeyedStream<Tuple2<String, String>, String> keyedStream = s1.keyBy(tp2 -> tp2.f0);
// 然后在keyby后的数据流上调用process算子
SingleOutputStreamOperator<Tuple2<Integer, String>> s2 = keyedStream.process(new KeyedProcessFunction<String, Tuple2<String, String>, Tuple2<Integer, String>>() {
    @Override
    public void processElement(Tuple2<String, String> value, KeyedProcessFunction<String, Tuple2<String, String>, Tuple2<Integer, String>>.Context ctx, Collector<Tuple2<Integer, String>> out) throws Exception {
        // 此处没做聚合,直接输出:把f0变整数,把f1变大写
        out.collect(Tuple2.of(Integer.parseInt(value.f0), value.f1.toUpperCase()));
    }
});

s2.print();
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值