Flink从入门到实战四[DataStream API]-1-DataStream API简介

DataStream API是Flink用于数据处理的API。是对有界数据和无界数据处理的API。

DataStream 在用法上类似于常规的 Java 集合,但在某些关键方面却大不相同。它们是不可变的,这意味着一旦它们被创建,你就不能添加或删除元素。你也不能简单地察看内部元素,而只能使用 DataStream API 操作来处理它们,DataStream API 操作也叫作转换(transformation)。

DataStream API和Java8的Lambda表达式语法一致,你可以通过在 Flink 程序中添加 source 创建一个初始的 DataStream。然后,你可以基于 DataStream 派生新的流,并使用 map、filter 等 API 方法把 DataStream 和派生的流连接在一起。

是否还记得我们前面章节demo代码,我们对代码做了结构总结,主要包括以下几个部分:
1、获取一个执行环境(execution environment);
2、加载/创建初始数据;
3、指定数据相关的转换;
4、指定计算结果的存储位置;
5、触发程序执行。

demo代码:

public static void main(String[] args) throws Exception {
	//创建执行环境
	ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

	//获取数据源
	String input = "D:\\______flink______\\input\\wordcount.txt";
	DataSet<String> inputDataSet = env.readTextFile(input);

	//数据计算
	DataSet<Tuple2<String, Integer>> result = inputDataSet.flatMap(new MyBatchFlatMapper())
			.groupBy(0)
			.sum(1);
			
	//指定计算结果的存储位置		
	result.print();
	
	//触发程序执行
	env.execute();
}	

Flink支持的Java数据类型
基本类型,即 String、Long、Integer、Boolean、Array
复合类型:Tuples、POJOs 和 Scala case classes

几种符合类型需要做一下说明:
1、Tuples
对于 Java,Flink 自带有 Tuple0 到 Tuple25 类型。

以Tuples2为例:
Tuple2 person = Tuple2.of(“Fred”, 35);

// zero based index!
String name = person.f0;
Integer age = person.f1;

2、POJOs
如果满足以下条件,Flink 将数据类型识别为 POJO 类型(并允许“按名称”字段引用):
1)该类是公有且独立的(没有非静态内部类)
2)该类有公有的无参构造函数
3)类(及父类)中所有的所有不被 static、transient 修饰的属性要么是公有的(且不被 final 修饰),要么是包含公有的 getter 和 setter 方法,这些方法遵循 Java bean 命名规范。