1. 通过广播变量获取
import org.apache.flink.api.common.functions.RichFlatMapFunction;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.util.Collector;
import java.util.ArrayList;
import java.util.List;
public class parameter {
public static void main(String[] args) throws Exception {
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
DataSet<Integer> boardcast = env.fromElements(1,2,3);
DataSet<Integer> ds = env.fromElements(2);
DataSet<Integer> DS = ds.flatMap(new RichFlatMapFunction<Integer, Integer>() {
List<Integer> list = new ArrayList<Integer>();
@Override
public void flatMap(Integer s, Collector<Integer> collector) throws Exception {
for(Integer ss : list){
collector.collect(ss * s);
}
}
@Override
public void open(Configuration parameters) throws Exception {
super.open(parameters);
list = getRuntimeContext().getBroadcastVariable("boardcast");
}
}).withBroadcastSet(boardcast,"boardcast");
DS.print();
}
}
2. 通过withParameters传递参数
import org.apache.flink.api.common.functions.RichFlatMapFunction;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.util.Collector;
import java.util.ArrayList;
import java.util.List;
public class parameter {
public static void main(String[] args) throws Exception {
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
DataSet<Integer> boardcast = env.fromElements(1,2,3);
//设置config,并添加变量
Configuration config = new Configuration();
config.setInteger("limit", 2);
DataSet<Integer> ds = env.fromElements(2);
DataSet<Integer> DS = ds.flatMap(new RichFlatMapFunction<Integer, Integer>() {
private int limit;
@Override
public void flatMap(Integer s, Collector<Integer> collector) throws Exception {
collector.collect(limit * s);
}
@Override
public void open(Configuration parameters) throws Exception {
super.open(parameters);
//获取变量
limit = parameters.getInteger("limit",0);
}
}).withParameters(config);
DS.print();
}
}
3. 通过构造函数传递参数
DataSet<Integer> toFilter = env.fromElements(1, 2, 3);
toFilter.filter(new MyFilter(2));
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;
}
}
4. 全局参数传递, 这种方式和withParameters感觉差不多
//先全局设置参数
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);
}