Hi Salva

As I pointed out, it's not clear for your program logic if you call 
'state.clear()' within 'snapshotState' as you do not know what exact current 
key is. Hence, I think your idea like that does not make any sense.

From my point of view, 'clear' works sometimes in your code is not a bug at 
current Flink framework. Currently, we would set currentKey when processing a 
record. However, Flink does not need to reset current key to null since there 
is no such life cycle for setting current key now. There seems no any benefit 
if introducing this, and might cause performance regression as we need more 
steps here.

Best
Yun Tang


On 12/2/19, 9:29 PM, "Salva Alcántara" <salcantara...@gmail.com> wrote:

    Hi Yun,
    
    Thanks for your reply. You mention that
    
    " ‘snapshotState’ and ‘initializeState’ interfaces are used mainly to
    snapshot and initialize for operator state"
    
    but..."mainly" is not "exclusively" right? So, I guess my question tries to
    figure out whether doing something like this is valid/makes sense?
    
    ```
      override def snapshotState(context: FunctionSnapshotContext): Unit = {
        if (models.nonEmpty) {
          modelsBytes.clear()
          for ((k, model) <- models) {
            modelsBytes.put(k, model.toBytes(v))
          }
        }
      }
    ```
    
    Indeed, the above code seems to work well ... so it seems like a bug that
    `clear` works sometimes but sometimes not as I noted in my reply to Congxian
    and others have noted in this extended question posted in stackoverflow:
    
    
https://stackoverflow.com/questions/59123188/state-handling-on-keyedcoprocessfunction-serving-ml-models
    
    
    
    --
    Sent from: 
http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/
    

Reply via email to