2017-08-07 35 views
1

我有一个密钥流:阿帕奇弗林克了:KeyedStream值地图功能,又不失键状态

KeyedStream<String, Data> keyed = 
     env.addSource(...) 
      .map(new Parser()) 
      .keyBy(i -> i.key) 

我想运行在我流的状态,全过程的功能;但process将返回,导致失去KeyedStream正常未键控流,并迫使我再次打电话keyBy

SingleOutputStreamOperator<Data> unkeyed = keyed.process(new Function) 
KeyedStream<String, Data> keyedAgain = keyed.keyBy(i -> i.key) 
  • 有什么办法叫过值的地图功能上KeyedStream

  • 如何在不使用低成本API(如ProcessFunction)的情况下运行状态完全功能,这会导致不必要的成本:运行时产生一个新的子任务,并重新清理我的数据?

回答

2

您可以使用RichMapFunctionRichFlatmapFunction,并有机会获得弗林克的管理状态的机制。与ProcessFunction相比,你会错过的是定时器。

请参阅示例here

+0

还有一个问题:在多个'keyBy'的情况下,是否有优化的机会?在同一个插槽中分组多个进程并删除混排开销的一种方法? –

相关问题