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. |
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. 2018-05-04 23:36 GMT+02:00 陈梓立 <[hidden email]>:
|
Free forum by Nabble | Edit this page |