我的代码是这样的:
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.enableCheckpointing(500);
DataStream<String> stream = env.addSource(getConsumer(TOPIC_1));
Jedis jedis = new Jedis("master1");
stream.map(new RichMapFunction<String, String>() {
@Override
public String map(String value) throws Exception {
String result = jedis.hget("rtc", value);
return result;
}
});
我想在map()
中从Redis获取一些数据,但它无法运行,因为Jedis.class不可序列化。
如何在map()
中使用不可序列化的类,例如ZkClient,Jedis?
答案 0 :(得分:2)
RichMapFunction
之类的所有丰富函数都可以覆盖open(Configuration)
和close
调用。一旦将函数部署到执行它的TaskManager,就会调用这些生命周期方法。
class MyMapFunction extends RichMapFunction<String, String> {
private transient Jedis jedis;
@Override
public void open(Configuration parameters) {
// open connection to Redis, for example
jedis = new Jedis("master1");
}
@Override
public void close() {
// close connection to Redis
jedis.close();
}
}