大数据学习之Flink(四)
数据源读入数据之后,我们就可以使用各种转换算子,讲一个或者多个DataStream转换成为新的DataStream(一个Flink程序的核心就是所有的转换操作,他们决定了处理的业务逻辑)

基本的转换算子:map、filter、flatMap等
聚合算子:keyBy
简单聚合:
sum():在输入流上,对指定的字段做叠加求和的操作
min():在输入流上,对指定的字段求最小值。
max():在输入流上,对指定的字段求最大值
minBy():与 min()类似,在输入流上针对指定字段求最小值。不同的是,min()只计算指定字段的最小值,其他字段会保留最初第一个数据的值;而 minBy()则会返回包含字段最小值的整条数据
maxBy():与 max()类似,在输入流上针对指定字段求最大值。两者区别与min()/minBy()完全一致。
归约聚合:reduce
object TransFormTestClass {
def main(args: Array[String]): Unit = {
/**
* 构建Flink环境
*/
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
env.setParallelism(2)
env.setRuntimeMode(RuntimeExecutionMode.BATCH)
//读取文件 构建有界流
val stuDS: DataStream[String] = env.readTextFile("FlinkProject/data/students.txt")
//统计每个班男生的数量
/**
* filter
* 过滤男生
*/
stuDS.filter(stu=>"男".equals(stu.split(",")(3)))
.map(stu=>(stu.split(",")(4),1))
.keyBy(kv=>kv._1)
// .sum(1)
//使用reduce手动进行聚合
.reduce((kv1,kv2)=>{
(kv1._1,kv1._2+kv2._2)
})
.print()
env.execute()
}
}
object TransFormWindowClass {
def main(args: Array[String]): Unit = {
/**
* 构建Flink环境
*/
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
env.setParallelism(2)
env.setRuntimeMode(RuntimeExecutionMode.BATCH)
//构建socket数据源
val lineDS: DataStream[String] = env.socketTextStream("master", 8888)
//统计最近10秒中单词的数量
lineDS
.flatMap(_.split(","))
.map(word=>(word,1))
.keyBy(kv=>kv._1)
/**
* 基于处理时间的滚动窗口
*/
.window(TumblingProcessingTimeWindows.of(Time.seconds(10)))
.sum(1)
.print()
//启动Flink
env.execute()
}
}
浙公网安备 33010602011771号