Flink的Tuple类型
Tuple说明
Tuple 英文意思是 元组。
Tuple 是flink 一个很特殊的类型 (元组类型),是一个抽象类,共26个Tuple子类继承Tuple 他们是 Tuple0一直到Tuple25。
Tuple后的数字,代表每一个元组中可用空间(理解为插槽也行,每个字段对应一个插槽)
我们可将其理解为Flink 为我们构造好了0-25个字段的模板类,每个字段类型可以自己指定,字段名由Flink控制,例如 f0 f1 f2等等。
Tuple构造
可使用静态方法newInstance进行元组构造 指定元组空间大小。
- 参数为1,则元组只有一个空间,则实际使用的Tuple1 字段只有f0
- 参数为2,则元组只有两个空间,则实际使用的Tuple2 字段只有f0,f1
// 指定 Tuple元组空间大小 (可理解为字段个数)
Tuple tuple = Tuple.newInstance(1);
元组存取值:
//设置字段值 以及字段索引位置 (从0开始)
tuple.setField("zs",0);
//取值
Object field = tuple.getField(0);
//zs
System.out.println(field.toString());
上方取值,是通过元组字段索引获取的,那么,我前边指定了tuple的空间大小为1 ,我如果tuple.getField(1); 会发生什么呢?
答案是:索引越界异常
所以我们更多的是使用Tuple.of(数据)方法构造Tuple元组
Tuple3<String, String, String> tuple3 = Tuple3.of("第一个格子 F0:zs", "第二个格子 F1:ls", "第三个格子 F2:ww");
System.out.println(tuple3.f0); // 第一个格子 F0:zs
System.out.println(tuple3.f1); // 第二个格子 F1:ls
System.out.println(tuple3.f2); // 第三个格子 F2:ww
Tuple也支持数据覆盖,例如,原本F0设置的是第一个格子 F0:zs,我们可以再次将其余值set进F0格子,覆盖以前的数据
// 覆盖某个格子值
tuple3.setField("a",0);
//覆改所有格子的值
tuple3.setFields("DDD", "b", "c");
System.out.println(tuple3.f0);
参考: |