Transformations
- map:输入一个元素,然后返回一个元素,中间可以做一些清洗转换等操作
- FlatMap:输入一个元素,可以返回零个,或一个多个元素
- MapPartiton:类似map,一次处理一个分区的数据【如果再进行map处理的时候需要获取第三方资源连接,建议使用MapPartiton】
- filter:过滤函数,对传入的数据进行判断,符合条件的数据会被保留下
- reduce:对数据进行聚合操作,结合当前元素和上一次reduce返回的值进行聚合操作,然后返回一个新值
- aggregations:sum(),min(),max()等
- Distinct:返回一个数据集中去重之后的元素,data.distinct();
- join:内连接
- OuterJoin:外连接
- Cross:获取两个数据集的笛卡尔积
- Union:返回两个数据集的总和,数据类型需要一致
- First-n:获取集合中的前N个元素
- Sort Partiton:再本地对数据集的所有分区进行排序,通过sortPartition的链接调用来完成对多个字段的排序
package com.im.flink.task.batch;
import org.apache.flink.api.common.functions.MapPartitionFunction;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.operators.DataSource;
import org.apache.flink.util.Collector;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* describe:
*
* @author lm
* @date 2019/11/3
*/
public class BatchDeamoMapPartition {
public static void main(String[] args) throws Exception {
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
List<String> list= new ArrayList<>();
list.add("hello you");
list.add("helloe me");
DataSource<String> text = env.fromCollection(list);
DataSet<String> mapPartitionData = text.mapPartition(new MapPartitionFunction<String, String>() {
@Override
public void mapPartition(Iterable<String> iterable, Collector<String> collector) throws Exception {
// 获取数据库连接 ,此时是一个分区的数据获取一次连接【优点,每个分区获取一次连接】
// values中保存一个分区的数据
// 处理数据
Iterator<String> it = iterable.iterator();
while (it.hasNext()){
String next = it.next();
String[] split = next.split("\\ ");
for (String word:split){
System.out.println("BatchDeamoMapPartition.mapPartition:"+word);
collector.collect(word);
}
}
// 关闭连接
}
});
mapPartitionData.distinct().print();