Hi,

FoldFunction was deprecated because it doesn't support partial aggregation.
AggregateFunction is much more expressive, however requires a bit more
implementation effort.
In favor of a concise API, FoldFunction was deprecated because it doesn't
offer more functionality than AggregateFunction.

You can implement your use case also easily using a MapFunction before the
window, that maps WikipediaEditEvent to Tuple2<String, Long> and a
ReduceFunction in the window that sums the length field.

Best, Fabian

2018-05-04 23:36 GMT+02:00 陈梓立 <wander4...@gmail.com>:

> I just write a code snip like
>
> ```
> .fold(new Tuple2<>("", 0L), new FoldFunction<WikipediaEditEvent,
> Tuple2<String, Long>>() {
>                     @Override
>                     public Tuple2<String, Long> fold(Tuple2<String, Long>
> acc, WikipediaEditEvent event) {
>                         acc.f0 = event.getUser();
>                         acc.f1 += event.getByteDiff();
>                         return acc;
>                     }
>                 });
> ```
>
> and replace it using `aggregate()`
>
> ```
> .aggregate(new AggregateFunction<WikipediaEditEvent, Tuple2<String,
> Long>, Tuple2<String,Long>>() {
>                     @Override
>                     public Tuple2<String, Long> createAccumulator() {
>                         return new Tuple2<>("", 0L);
>                     }
>
>                     @Override
>                     public Tuple2<String, Long> add(WikipediaEditEvent
> event, Tuple2<String, Long> acc) {
>                         return new Tuple2<>(event.getUser(), acc.f1 +
> event.getByteDiff());
>                     }
>
>                     @Override
>                     public Tuple2<String, Long> getResult(Tuple2<String,
> Long> acc) {
>                         return acc;
>                     }
>
>                     @Override
>                     public Tuple2<String, Long> merge(Tuple2<String, Long>
> a, Tuple2<String, Long> b) {
>                         return new Tuple2<>(a.f0, a.f1 + b.f1);
>                     }
>                 });
> ```
>
> It seems I have to write much more code using `aggregate()`
>
> Is there something I miss so that write so much code? Or say, maybe
> `aggregate()` is expressive, but why `fold()` deprecated? Since `fold` is a
> general concept people can understand.
>

Reply via email to