一、将参数传递给函数
可以使用构造函数方法或withParameters()方法将参数传递给函数。这些参数将作为功能对象的一部分进行序列化,并交付给所有并行任务实例
一、构造函数方法
public static void main(String[] args) {
// 获取执行环境
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
// 加载或创建源数据
DataSet<Integer> toFilter = env.fromElements(1,2,3);
toFilter.filter(new MyFilter(2));
}
// 通过实现FilterFunction来实现自定义过滤规则
private static class MyFilter implements FilterFunction<Integer>{
private final int limit;
public MyFilter(int limit){
this.limit = limit;
}
@Override
public boolean filter(Integer value) throws Exception {
return value > limit;
}
}
二、withParameters()方法
- withParameters()方法将Configuration对象作为参数传递给富函数的open()方法。
- withParameters()方法只支持在批处理程序中使用,不支持在流处理程序中使用。withParameters()方法要在每个算子后面使用,并不是使用一次就可以获取所有值。如果所有算子都要配置该信息,则需要重复设置多次
三、通过ExecutionConfig接口
Flink允许将自定义配置值传递到执行环境的ExecutionConfig接口。由于可以在所有用户函数中访问执行环境的配置,因此自定义的配置全局可用
Configuration conf = new Configuration();
// 自定义配置信息
conf.setString("mykey","myvalue");
// 获取执行环境
final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
// 设置全局参数
env.getConfig().setGlobalJobParameters(conf);
全局作业参数中的对象可以在系统中的许多位置被访问。所有实现富函数接口的用户自定义函数都可以通过执行引擎上下文进行访问
public static final class Tokenizer extends RichFlatMapFunction<String, Tuple2<String,Integer>>{
private String mykey;
@Override
public void open(Configuration parameters) throws Exception{
super.open(parameters);
// 获取配置信息
ExecutionConfig.GlobalJobParameters globalParams =
getRuntimeContext().getExecutionConfig()
.getGlobalJobParameters();
Configuration globConf = (Configuration) globalParams;
// 自定义配置信息
mykey = globConf.getString("mykey",null);
}
}