That makes sense!  Maybe we can make MapState implement Iterable interface, so 
that we can use foreach directly on MapState.

- Jark Wu 

> 在 2016年10月19日,下午5:48,SHI Xiaogang <shixiaoga...@gmail.com> 写道:
> 
> 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