Apache Flink学习笔记(7)Flink中支持的数据类型,UDF和富函数

Flink支持的Java数据类型

Java元组类型

Flink中java的元组类型是Flink自己定义的。

Tuple1,Tuple2,Tuple2.。。。。Tuple25以此类推

数据结构类似于(data1,data2,data3)是一个线性表

Java的包装类

Integer,Double等等

Java的简单对象(POJO)

简单类,必须有无参构造函数,属性是public,属性不是public,就必须有get,set函数。

其它

ArrayList,HashMap等等。

UDF(自定义函数)函数类

函数类

MapFunction,FilterFunction,ProcessFunction等等是在Map,Fliter,Process任务中。

使用lambda表达式需要注意是否有泛型擦除的问题。

富函数

很多操作都有富函数,在原有函数之上进行扩展:
在这里插入图片描述

很多UDF都是可以使用福函数的,其中富函数还包括open,close,上下文操作等等。

在这里插入图片描述
RichMapFunction具有MapFunction的功能,其中的map函数也是循环调用,并且增加了这个任务开始和结束时应该发生的事情,利用open和close函数,这两个函数只在开始和结束时执行一次

package org.benchmark;

import org.apache.flink.api.common.functions.RichMapFunction;
import org.apache.flink.api.java.tuple.Tuple;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.KeyedStream;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

public class TransFormRichFunction {
    public static void main(String[] args) throws Exception{
        // 创建执行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(1);

        // 读取文件数据
        String inputPath = Thread.currentThread().getContextClassLoader().getResource("sensor.txt").getFile();
        DataStreamSource<String> stringDataStreamSource = env.readTextFile(inputPath);

        // map操作
        SingleOutputStreamOperator<SensorReading2> map = stringDataStreamSource.map((String value) -> {
            String[] fields = value.split(",");
            return new SensorReading2(fields[0], new Long(fields[1]), new Double(fields[2]));
        }).setParallelism(2);

        map.map(new RichMapFunction<SensorReading2, Object>() {
            @Override
            public Object map(SensorReading2 value) throws Exception {
                // 返回任务序号
                return new Tuple2<>(value.getId(), getRuntimeContext().getIndexOfThisSubtask());
            }

            @Override
            public void open(Configuration parameters) throws Exception {
                // 初始化工作,一般是定义状态,或者建立数据库连接
                System.out.println(getRuntimeContext().getIndexOfThisSubtask() + "open");
            }

            @Override
            public void close() throws Exception {
                // 关闭连接,清空状态等收尾操作
                System.out.println(getRuntimeContext().getIndexOfThisSubtask() + "close");
            }
        }).print();

        // 启动Job
        env.execute();
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值