Hi Jark

If the state is very big, it may occupy a lot of memory if we return
Set<Map.Entry<K, V>>.

By wrapping the returned iterator, we can easily implement a method
returning  Iterable<Map.Entry<K, V>>.
Users can use that returned Iterable in the foreach loop.

Regards
Xiaogang



2016-10-19 17:43 GMT+08:00 Jark Wu <wuchong...@alibaba-inc.com>:

> Hi Xiaogang,
>
> I think maybe return Set<Map.Entry<K,V>> is better than
> Iterator<Map.Entry<K,V>>.
> Because users can use foreach on Set but not Iterator, and can use
> iterator access via set.iterator().
> Maybe Map.entrySet() is a more familiar way to users.
>
>
> - Jark Wu
>
> > 在 2016年10月19日,下午5:18,SHI Xiaogang <shixiaoga...@gmail.com> 写道:
> >
> > Agreed.
> >
> > contains(K key) should be provided.
> > The iterator() method should return Iterator<Map.Entry<K, V>> instead of
> > Iterator<Tuple2<K, V>>.
> >
> > Besides, size() may also be provided.
> >
> > With these methods, MapStates appear very similar to Java Maps. Users
> will
> > be very happy to use them.
> >
> > Regards,
> > Xiaogang
> >
> >
> > 2016-10-19 16:55 GMT+08:00 Till Rohrmann <trohrm...@apache.org>:
> >
> >> 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
> >>>
> >>
>
>

Reply via email to