The keys in the MapState are different from the keys in the KeyedStream. There are two types of keys: Stream Keys and User Keys.
StreamKeys are those created by the keyBy() operation. As well as other states, MapStates are created under StreamKeys. The keys of the MapState are called UserKeys. UserKeys are not necessarily as the same as the StreamKeys. Regards Xiaogang 2016-10-19 17:28 GMT+08:00 Aljoscha Krettek <aljos...@apache.org>: > Hi, > just making sure I understand this correctly. Would the MapState keys be > the same keys as the one provided when creating the KeyedStream or a > different key. > > As an example, would it be like this: > > DataStream<Tuple2<K, V>> input = ...; > KeyedStream keyed = input.keyBy(0) > keyed.map( Tuple2<K, V> input -> mapState.put(input.f0, input.f1) ) > > or like this: > > DataStream<Tuple3<K, V1, V2>> input = ...; > KeyedStream keyed = input.keyBy(0) > keyed.map( Tuple3<K, V1, V2> input -> mapState.put(input.f1, input.f2) ) // > <- notice how the key for the MapState is different from the key of the > KeyedStream > > Cheers, > Aljoscha > > > On Wed, 19 Oct 2016 at 10:55 Till Rohrmann <trohrm...@apache.org> wrote: > > Hi Xiaogang, > > I really like your proposal and think that this would be a valuable > addition to Flink :-) > > For convenience we could maybe add contains(K key), too. > > Java's Map interface returns a Set of Entry when calling entrySet() (which > is the equivalent of iterator() in our interface). The Entry interface not > only allows to get access to the key and value of the map entry but also > allows to set a value for the respective key via setValue (even though it's > an optional operation). Maybe we want to offer something similar when > getting access to the entry set via the iterator method. > > Cheers, > Till > > On Wed, Oct 19, 2016 at 4:18 AM, SHI Xiaogang <shixiaoga...@gmail.com> > wrote: > > > Hi, all. I created the JIRA https://issues.apache.org/ > > jira/browse/FLINK-4856 to > > propose adding MapStates into Flink. > > > > MapStates are very useful in our daily jobs. For example, when > implementing > > DistinctCount, we store the values into a MapState and the result of each > > group(key) is exactly the number of entries in the MapState. > > > > In my opinion, the methods provided by the MapState may include: > > * void put(K key, V value) > > * V get(K key) > > * Iterable<K> keys() > > * Iterable<V> values() > > * Iterator<Tuple2<K, V>> iterator() > > > > Do you have any comments? Any is appreciated. > > > > Xiaogang > > >