大数据学习之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()
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结