DataStream与DataSet
Posted 浅然言而信
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DataStream与DataSet相关的知识,希望对你有一定的参考价值。
DataStream与DataSet
Flink具有特殊类DataStream与DataSet,这两者是flink中主要的数据源,根据数据源可分为有界源和无界源,而DataStream则是无界源,DataSet是有界源,也就是说DataStream常用于流处理,而DataSet用于批处理。
DataStream API
- DataStream Sources(数据来源)
- DataStream Transformations(数据转化)
- DataStream Sinks(数据的目的地)
DataStream Sources(数据来源)
大多实际应用环境都以自定义数据源为主,常常从kafka中读取数据,flink官方也有专门的kafka连接器提供
- 基于文件
- 基于Socket
- 基于集合
- 自定义
DataStream Transformations(数据转化)
官方提供许多处理的方法
- map:输入一个数据,返回一个数据,中间可做相关处理
DataStream<Integer> dataStream = //...
dataStream.map(new MapFunction<Integer, Integer>()
@Override
public Integer map(Integer value) throws Exception
return 2 * value;
);
- flatmap:输入一个数据,返回零个、一个、多个数据,中间可做相关处理
dataStream.flatMap(new FlatMapFunction<String, String>()
@Override
public void flatMap(String value, Collector<String> out)
throws Exception
for(String word: value.split(" "))
out.collect(word);
);
- filter:对数据进行过滤
dataStream.filter(new FilterFunction<Integer>()
@Override
public boolean filter(Integer value) throws Exception
return value != 0;
);
- keyBy:根据指定的key进行分区
注意:以下类型无法作为key
1、即使它是pojo类型,但不覆盖hashcode方法并依赖于Object.hashcode()方法
2、它是任何类型的数组
dataStream.keyBy("someKey") // Key by field "someKey"
dataStream.keyBy(0) // Key by the first element of a Tuple(指定tuple中的第一个元素作为分组key)
等等具体可查阅官方文档:https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/stream/operators/index.html
DataStream Sinks(数据的目的地)
Sink将处理后的数据转发到文件、sockets、外部系统(如kafka、redis)、print()打印,flink有许多已经封装好的内置方法。在实际应用中经常使用addSink自定义将数据输出到外部系统
- writeAsText():按字符串顺序写入,这些字符串通过调用每个元素的toString()方法来获取
- writeAsCsv(…):将元组写为逗号分隔值文件。行和字段分隔符是可配置的
- print()/printToErr(): 打印每个元素的toString()方法
- writeUsingOutputFormat():自定义文件输出的方法和基类,支持自定义对象到字节的转换。
- writeToSocket:根据SerializationSchema写入元素到socket
- addSink:自定义输出,如kafka、redis
注意:write*()方法主要是用于调试的目的,它们并没有参与flink的checkpoint,这就意味着这些函数是at-least-once(至少一次)的语义,通过addSink()方法的自定义可以实现flink的exactly-once(精确一次)(可靠)的语义
以上是关于DataStream与DataSet的主要内容,如果未能解决你的问题,请参考以下文章
95-910-140-源码-FlinkSQL-FlinkSQL简介
4.Flink入门案例前置说明准备环境代码实现-DataSet-了解DataStream--匿名内部类--处理批DataStream-匿名内部类-处理流LambdaOn-Yarn-掌握
大数据开发-Flink-数据流DataStream和DataSet
大数据开发-Flink-数据流DataStream和DataSet