水善利万物而不争,处众人之所恶,故几于道
public class Flink01_Batch_WordCount {
public static void main(String[] args) throws Exception {
// 1.拿到批处理的执行环境
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
// 2. 读文件
DataSource<String> dataSource = env.readTextFile("input/words.txt");
dataSource
// 扁平化,用flatMap
.flatMap(new FlatMapFunction<String, String>() {
public void flatMap(String line, Collector<String> out) throws Exception {
String[] words = line.split(" ");
for (String word : words) {
out.collect(word);
}
}
})
// 做映射,映射成tuple2元组,注意是对偶元组
.map(new MapFunction<String, Tuple2<String,Long>>() {
public Tuple2 map(String value) throws Exception {
return Tuple2.of(value,1L);
}
})
// 以第一个字段分组
.groupBy(0)
.sum(1)
.print();
}
}
public class Flink02_Streaming_WordCount {
public static void main(String[] args) throws Exception {
// 获取有界流对象
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 并行度设置为1
env.setParallelism(1);
// 读取文本文件-有界流
DataStreamSource<String> dataStreamSource = env.readTextFile("input/words.txt");
dataStreamSource
// 对数据进行扁平化处理,并且映射为元组 (hello,1) 的形式
// FlatMapFunction第一个参数是输入元素的类型,第二个参数是处理后返回元素的类型
.flatMap(new FlatMapFunction<String, Tuple2<String,Long>>() {
// 输入元素的类型是一行一行的文本数据 返回的元素类型是元组
public void flatMap(String lineData, Collector<Tuple2<String,Long>> out) throws Exception {
String[] split = lineData.split(" "); // 对读到的一行数据进行切割
for (String word : split) {
out.collect(Tuple2.of(word,1L)); // 封装到元组中
}
}
})
// keyBy操作不会改变数据 相当于 传进来的数据 从这个数据里面抽取出一个key 作为标签 数据本身不会有任何的变化
// KeySelector 第一个参数是传过来的数据 第二个参数是抽取出key的类型
// 这个方法抽取出key 相同的 会被分到同一个组中
.keyBy(new KeySelector<Tuple2<String, Long>, String>() {
// 参数是要抽取的对象
public String getKey(Tuple2<String, Long> extract_tuple2) throws Exception {
return extract_tuple2.f0; // 抽取的key是元组的第一个元素
}
})
// 对同一组内 元组的第二个元素求和
.sum(1)
.print();
env.execute(); // 触发执行
}
}
public class Flink03_Streaming_unbounded_WordCount {
public static void main(String[] args) throws Exception {
// 拿到流处理环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);
// 读取端口里的数据
DataStreamSource<String> dataStreamSource = env.socketTextStream("hadoop101", 9999);
dataStreamSource
.flatMap(new FlatMapFunction<String, String>() {
public void flatMap(String lineData, Collector<String> out) throws Exception {
String[] splits = lineData.split(" ");
for (String word : splits) {
out.collect(word);
}
}
})
.map(new MapFunction<String, Tuple2<String,Long>>() {
public Tuple2<String, Long> map(String word) throws Exception {
return Tuple2.of(word,1L);
}
})
.keyBy(new KeySelector<Tuple2<String, Long>, String>() {
public String getKey(Tuple2<String, Long> operationedTuple2) throws Exception {
return operationedTuple2.f0;
}
})
.sum(1)
.print();
env.execute();
}
}