Flink的DataSet基本算子总结_flink dateset 算子详解

/* new MapPartitionFunction<String, String>
第一个String:表示分区中的数据元素类型
第二个String:表示处理后的数据元素类型*/
DataSet mapPartitionData = text.mapPartition(new MapPartitionFunction<String, String>() {

public void mapPartition(Iterable<String> values, Collector<String> out) throws Exception {
	//针对分区进行操作的好处是:比如要进行数据库的操作,一个分区只需要创建一个Connection
	//values中保存了一个分区的数据
	 Iterator<String> it = values.iterator();
	while (it.hasNext()) {
		String next = it.next();
		String[] split = next.split(" ");
		for (String word : split) {
			out.collect(word);
		}
	}
	//关闭链接
}

});
mapPartitionData.print();


## 2、Filter与Distinct



//获取运行环境
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

ArrayList data = new ArrayList();
data.add(“I love Beijing”);
data.add(“I love China”);
data.add(“Beijing is the capital of China”);
DataSource text = env.fromCollection(data);

DataSet flatMapData = text.flatMap(new FlatMapFunction<String, String>() {

public void flatMap(String data, Collector<String> collection) throws Exception {
	String[] words = data.split(" ");
	for(String w:words){
		collection.collect(w);
	}
}

});

//去掉重复的单词
flatMapData.distinct().print();
System.out.println(“*********************”);

//选出长度大于3的单词
flatMapData.filter(new FilterFunction() {

public boolean filter(String word) throws Exception {
	int length = word.length();
	return length>3?true:false;
}

}).print();


## 3、Join操作



//获取运行的环境
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

//创建第一张表:用户ID 姓名
ArrayList<Tuple2<Integer, String>> data1 = new ArrayList<Tuple2<Integer,String>>();
data1.add(new Tuple2(1,“Tom”));
data1.add(new Tuple2(2,“Mike”));
data1.add(new Tuple2(3,“Mary”));
data1.add(new Tuple2(4,“Jone”));
//创建第二张表:用户ID 所在的城市
ArrayList<Tuple2<Integer, String>> data2 = new ArrayList<Tuple2<Integer,String>>();
data2.add(new Tuple2(1,“北京”));
data2.add(new Tuple2(2,“上海”));
data2.add(new Tuple2(3,“广州”));
data2.add(new Tuple2(4,“重庆”));

//实现join的多表查询:用户ID 姓名 所在的程序
DataSet<Tuple2<Integer, String>> table1 = env.fromCollection(data1);
DataSet<Tuple2<Integer, String>> table2 = env.fromCollection(data2);

table1.join(table2).where(0).equalTo(0)
/*第一个Tuple2<Integer,String>:表示第一张表

  • 第二个Tuple2<Integer,String>:表示第二张表
  • Tuple3<Integer,String, String>:多表join连接查询后的返回结果 */
    .with(new JoinFunction<Tuple2<Integer,String>, Tuple2<Integer,String>, Tuple3<Integer,String, String>>() {
    public Tuple3<Integer, String, String> join(Tuple2<Integer, String> table1,
    Tuple2<Integer, String> table2) throws Exception {
    return new Tuple3<Integer, String, String>(table1.f0,table1.f1,table2.f1);
    } }).print();

## 4、笛卡尔积



ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

//创建第一张表:用户ID 姓名
ArrayList<Tuple2<Integer, String>> data1 = new ArrayList<Tuple2<Integer,String>>();
data1.add(new Tuple2(1,“Tom”));
data1.add(new Tuple2(2,“Mike”));
data1.add(new Tuple2(3,“Mary”));
data1.add(new Tuple2(4,“Jone”));

//创建第二张表:用户ID 所在的城市
ArrayList<Tuple2<Integer, String>> data2 = new ArrayList<Tuple2<Integer,String>>();
data2.add(new Tuple2(1,“北京”));
data2.add(new Tuple2(2,“上海”));
data2.add(new Tuple2(3,“广州”));
data2.add(new Tuple2(4,“重庆”));

//实现join的多表查询:用户ID 姓名 所在的程序
DataSet<Tuple2<Integer, String>> table1 = env.fromCollection(data1);
DataSet<Tuple2<Integer, String>> table2 = env.fromCollection(data2);

//生成笛卡尔积
table1.cross(table2).print();


## 5、First-N



ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

//这里的数据是:员工姓名、薪水、部门号
DataSet<Tuple3<String, Integer,Integer>> grade =
env.fromElements(new Tuple3<String, Integer,Integer>(“Tom”,1000,10),
new Tuple3<String, Integer,Integer>(“Mary”,1500,20),
new Tuple3<String, Integer,Integer>(“Mike”,1200,30),
new Tuple3<String, Integer,Integer>(“Jerry”,2000,10));

//按照插入顺序取前三条记录
grade.first(3).print();
System.out.println(“**********************”);

//先按照部门号排序,在按照薪水排序
grade.sortPartition(2, Order.ASCENDING).sortPartition(1, Order.ASCENDING).print();
System.out.println(“**********************”);

//按照部门号分组,求每组的第一条记录
grade.groupBy(2).first(1).print();


## 6、外链接操作



ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

//创建第一张表:用户ID 姓名
ArrayList<Tuple2<Integer, String>> data1 = new ArrayList<Tuple2<Integer,String>>();
data1.add(new Tuple2(1,“Tom”));
data1.add(new Tuple2(3,“Mary”));
data1.add(new Tuple2(4,“Jone”));

//创建第二张表:用户ID 所在的城市
ArrayList<Tuple2<Integer, String>> data2 = new ArrayList<Tuple2<Integer,String>>();
data2.add(new Tuple2(1,“北京”));
data2.add(new Tuple2(2,“上海”));
data2.add(new Tuple2(4,“重庆”));

//实现join的多表查询:用户ID 姓名 所在的程序
DataSet<Tuple2<Integer, String>> table1 = env.fromCollection(data1);
DataSet<Tuple2<Integer, String>> table2 = env.fromCollection(data2);

//左外连接
table1.leftOuterJoin(table2).where(0).equalTo(0)
.with(new JoinFunction<Tuple2<Integer,String>, Tuple2<Integer,String>, Tuple3<Integer,String,String>>() {

	public Tuple3<Integer, String, String> join(Tuple2<Integer, String> table1,
			Tuple2<Integer, String> table2) throws Exception {
		// 左外连接表示等号左边的信息会被包含
		if(table2 == null){
			return new Tuple3<Integer, String, String>(table1.f0,table1.f1,null);
		}else{
			return new Tuple3<Integer, String, String>(table1.f0,table1.f1,table2.f1);
		}
	}
}).print();

System.out.println(“***********************************”);
//右外连接

一、网安学习成长路线图

网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、网安视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值