我创建了一个包含配置的流式传输环境,并尝试使用open()
的{{1}}方法访问此配置。
示例:
RichMapFunction
但是,在调试 Configuration conf = new Configuration();
conf.setBoolean("a", true);
StreamExecutionEnvironment env =
StreamExecutionEnvironment.createLocalEnvironment(8, conf);
DataStreamSource<Integer> source = env.fromElements(5,5,5,5,5);
source.map(new RichMapFunction<Integer, Integer>() {
@Override
public void open(Configuration parameters) throws Exception {
boolean a = parameters.getBoolean("a", false);
super.open(parameters);
}
@Override
public Integer map(Integer value) throws Exception {
return value;
}
}).print();
env.execute();
方法时,我发现配置为空。
我做错了什么?如何将配置正确传递到流式传输环境中的open()
?
答案 0 :(得分:1)
Flink的DataStream和DataSet API在您的示例中共享相同的用户功能接口,如RichMapFucntion
。
Flink Configuration
的{{1}}方法的open
参数是DataSet API的第一个版本的遗留物,未在DataStream API中使用。 Flink序列化您在RichFunction
调用中提供的对象并将其发送给并行工作者。因此,您可以直接在对象中将参数设置为常规字段。