|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

 

posted on   yanqi_vip  阅读(25)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示