|NO.Z.00026|——————————|BigDataEnd|——|Hadoop&Flink.V10|——|Flink.v10|API详解Flink DataSet|DataSource|Transformation|Sink|
一、Flink DataSet常用API
### --- Flink DataSet常用API
~~~ DataSet API同DataStream API一样有三个组成部分,各部分作用对应一致,此处不再赘述
二、DataSource
### --- DataSource
~~~ 对DataSet批处理而言,较为频繁的操作是读取HDFS中的文件数据,
~~~ 因为这里主要介绍两个DataSource组件
### --- 基于集合
~~~ fromCollection(Collection),主要是为了方便测试使用
### --- 基于文件
~~~ readTextFile(path),基于HDFS中的数据进行计算分析
三、Transformation:Transformation实现方法
TransFormation | Description |
Map | 在算子中得到一个元素并生成一个新元素data.map { x => x.toInt } |
FlatMap | 在算子中获取一个元素, 并生成任意个数的元素data.flatMap { str =>str.split(" ") } |
MapPartition | 类似Map, 但是一次Map一整个并行分区data.mapPartition { in => in map { (_, 1) } } |
Filter | 如果算子返回true则包含进数据集, 如果不是则被过滤掉data.filter { _ > 100 } |
Reduce | 通过将两个元素合并为一个元素, 从而将一组元素合并为一个元素 data.reduce { _ + _ } |
ReduceGroup | 将一组元素合并为一个或者多个元素 data.reduceGroup { elements => elements.sum } |
Aggregate | 讲一组值聚合为一个值, 聚合函数可以看作是内置的Reduce函数 data.aggregate(SUM, 0).aggregate(MIN, 2)data.sum(0).min(2) |
Distinct | 去重 |
Join | 按照相同的Key合并两个数据集 input1.join(input2).where(0).equalTo(1)同时也可以选择进行合并的时候的策略, 是分区还是广播, 是基于排序的算法还是基于哈希的算法 input1.join(input2, JoinHint.BROADCAST_HASH_FIRST).where(0).equalTo(1) |
OuterJoin | 外连接, 包括左外, 右外, 完全外连接等 left.leftOuterJoin(right).where(0).equalTo(1) { (left, right) => ... } |
CoGroup | 二维变量的Reduce运算, 对每个输入数据集中的字段进行分组, 然后join 这些组input1.coGroup(input2).where(0).equalTo(1) |
Cross | 笛卡尔积input1.cross(input2) |
Union | 并集input1.union(input2) |
Rebalance | 分区重新平衡, 以消除数据倾斜input.rebalance() |
Hash-Partition | 按照Hash分区input.partitionByHash(0) |
Range-Partition | 按照Range分区input.partitionByRange(0) |
CustomParititioning | 自定义分区input.partitionCustom(partitioner: Partitioner[K], key) |
First-n | 返回数据集中的前n个元素input.first(3) |
partitionByHash | 按照指定的key进行hash分区 |
sortPartition | 指定字段对分区中的数据进行排序 |
### --- Flink针对DataSet也提供了大量的已经实现的算子,和DataStream计算很类似
~~~ Map:输入一个元素,然后返回一个元素,中间可以进行清洗转换等操作
~~~ FlatMap:输入一个元素,可以返回0个、1个或者多个元素
~~~ Filter:过滤函数,对传入的数据进行判断,符合条件的数据会被留下
~~~ Reduce:对数据进行聚合操作结合当前元素和上一次Reduce返回的值进行聚合操作然后返回一个新值
~~~ Aggregations:sum()、min()、max()等
四、Sink
### --- Flink针对DataStream提供了大量的已经实现的数据目的地(Sink),具体如下所示
~~~ # writeAsText():
~~~ 将元素以字符串形式逐行写入,这些字符串通过调用每个元素的toString()方法来获取
~~~ # writeAsCsv():
~~~ 将元组以逗号分隔写入文件中,行及字段之间的分隔是可配置的,
~~~ 每个字段的值来自对象的toString()方法
~~~ # print()/pringToErr():
~~~ 打印每个元素的toString()方法的值到标准输出或者标准错误输出流中
~~~ Flink提供了一批内置的Connector,其中有的Connector会提供对应的Sink支持,如1.1节中表所示
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv020-flink
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY