Flink BaseTransform
- Map
- FlatMap
- Filter
Map
特点:一对一,可以改变数据类型
一对一:一个数据只返回一个数据 eg:a->b 虽然数据不同了但是还是一个
可以改变数据类型:通过map操作可以返回任意一个已经存在的类型
eg:string=>UDF自定义类型
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);
//测试可以直接使用绝对路径
String path = "hello.txt";
DataStream<String> inputDataStream = env.readTextFile(path);
//map算子需要传递一个MapFunction,可以使用匿名类,自定义类,或者lambda表达式,这里使用匿名类的方法,相比之下比较适中。
DataStream<Integer> outputDataStream = inputDataStream.map(new MapFunction<String, Integer>() {
@Override
public Integer map(String s) throws Exception {
return s.length();
}
});
outputDataStream.print("Map");
env.execute();
}
FlatMap
特点:一对多,可以改变数据类型
一对多:向下兼容一对一
改变数据类型:略
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);
//测试可以直接使用绝对路径
String path = "hello.txt";
DataStream<String> inputDataStream = env.readTextFile(path);
DataStream<String> outputDataStream = inputDataStream.flatMap(new FlatMapFunction<String, String>() {
@Override
public void flatMap(String value, Collector<String> out) throws Exception {
String[] split = value.split(",");
//将一个String拆分为多个String返回
for (String s : split) {
out.collect(s);
}
}
});
outputDataStream.print("FlatMap");
env.execute();
}
Filter
特点:不能改变数据类型即来什么数据类型返回就是什么数据类型
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);
//测试可以直接使用绝对路径
String path = "hello.txt";
DataStream<String> inputDataStream = env.readTextFile(path);
DataStream<String> outputDataStream = inputDataStream.filter(new FilterFunction<String>() {
@Override
public boolean filter(String value) throws Exception {
return value.startsWith("'sensor_1'");
}
});
outputDataStream.print("Fliter");
env.execute("");
}