Flink的官网:https://flink.apache.org/
使用的软件:IntelliJ IDEA Community Edition
CoreAPI:
- DataSet:专门处理离线数据,给离线数据处理设计了更多有针对性的API. env:ExecutionEnvironment
- DataStream:一般用于处理流式数据,也可以处理离线数据env:StreamExecutionEnvironment
创建TransformationTest文件
练习一
将输入的数字均乘10
package cn.tedu.dataset;
import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.operators.DataSource;
public class TransformationTest {
public static void main(String[] args) throws Exception {
//1.获取执行环境
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
//2.获取数据源
DataSource<Integer> source = env.fromElements(1, 2, 3, 4, 5);
//3.转化数据
//map:进一出一
source.map(new MapFunction<Integer, Integer>() {
@Override
public Integer map(Integer value) throws Exception {
return value * 10;
}
})
//4.输出结果
.print();
//5.触发程序执行
}
}
需要注意的点:
- 与之前那篇博客一样,很多代码不需要手敲,使用快捷键非常方便
- 着重要注意的是第三步,敲完"source.map(new M"后直接回车,能跳出"source.map(new MapFunction<Integer, Object>",括号中的"Integer"分别代表输入和输出值的类型,第一个之所以是Int是因为第二步中"source"就已经定义了是int,但是输出它不知道你需要什么,所以是"object"(注意第一个Integer有个蓝框)我们需要输入和输出都是int,所以先回车,将蓝框跳到"Object",输入"Integer",之后直接回车,下面的两行会直接跳出来,不需要手打(跳出下面两行不止一种方法,这一种感觉比较方便)
练习二
将字符串转化成 int 输出
package cn.tedu.dataset;
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.operators.DataSource;
import org.apache.flink.util.Collector;
public class TransformationTest {
public static void main(String[] args) throws Exception {
//1.获取执行环境
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
//获取数据源
DataSource<String> source = env.fromElements("1, 2, 3, 4, 5"); //输入的是字符串
//3.转化数据
//flatMap:进一出多
source.flatMap(new FlatMapFunction<String, Integer>() {
@Override
public void flatMap(String value, Collector<Integer> out) throws Exception {
String[] split = value.split(", ");//将字符串拆开
for (String s : split) {
out.collect(Integer.parseInt(s)); //将字符串转化为int
}
}
})
//4.输出结果
.print();
//5.触发程序执行
}
}
需要注意的点:
- 我输入字符串时,每个数字的间隔是“, ”,除了逗号外还有空格,所以在第三步split将字符串拆开时也需要加个空格
练习三
每个数字累计求和
package cn.tedu.dataset;
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.common.functions.ReduceFunction;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.operators.DataSource;
import org.apache.flink.util.Collector;
public class TransformationTest {
public static void main(String[] args) throws Exception {
//1.获取执行环境
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
//获取数据源
DataSource<String> source = env.fromElements("1, 2, 3, 4, 5"); //输入的是字符串
//3.转化数据
//flatMap:进一出多
source.flatMap(new FlatMapFunction<String, Integer>() {
@Override
public void flatMap(String value, Collector<Integer> out) throws Exception {
String[] split = value.split(", ");//将字符串拆开
for (String s : split) {
out.collect(Integer.parseInt(s)); //将字符串转化为int
}
}
}).reduce(new ReduceFunction<Integer>() {
@Override
public Integer reduce(Integer value1, Integer value2) throws Exception {
return value1+value2;
}
})
//4.输出结果
.print();
//5.触发程序执行
}
}
与练习二相比只在第三步底下增加了一点,其他不变&#