Hi Ken,
thanks for your answer. You're right and I'm doing it already that way.
I just hoped that I could avoid the ValueState (I'm using a MapState as
well already, which does not store the key) and get the key from the
provided Context of the ProcessFunction. This would avoid having the
ValueState and setting it in the processElement just to know the key in
the onTimer function.
In the current way I have to check the ValueState for every element if
the key is already set or just set it every time again the
processElement method is invoked.
Best,
Jürgen
On 02.02.2018 18:37, Ken Krugler wrote:
Hi Jürgen,
On Feb 2, 2018, at 6:24 AM, Jürgen Thomann
<juergen.thom...@innogames.com
<mailto:juergen.thom...@innogames.com>> wrote:
Hi,
I'm currently using a ProcessFunction after a keyBy() and can't find
a way to get the key.
Doesn’t your keyBy() take a field (position, or name) to use as the key?
So then that same field contains the key in the
ProcessFunction.processElement(in, …) parameter, yes?
I'm currently storing it in a ValueState<String> within processElement
If you’re using a ValueState, then there’s one of those for each
unique key, not one for the operation.
I.e. the ValueState for key = “one” is separate from the ValueState
for key = “two”.
You typically store the key in the state so it’s accessible in the
onTimer method.
and set it all the time, so that I can access it in onTimer(). Is
there a better way to get the key? We are using Flink 1.3 at the moment.
The ValueState (what you used in processElement) that you’re accessing
in the onTimer() method is also scoped by the current key.
So assuming you stored the key in the state inside of your
processElement() call, then you should have everything you need.
— Ken
PS - Check out
https://www.slideshare.net/dataArtisans/apache-flink-training-datastream-api-processfunction
--------------------------
Ken Krugler
http://www.scaleunlimited.com <http://www.scaleunlimited.com/>
custom big data solutions & training
Hadoop, Cascading, Cassandra & Solr