Yes, this is correct right now. It should not be too hard to add the 
pre-aggregation behavior for fold, however.
> On 30 Dec 2015, at 17:31, Brian Chhun <brian.ch...@getbraintree.com> wrote:

> 
> Hi All,
> 
> Are certain considerations when using these functions on windowed streams?
> 
> From reading the code, it looks using reduce (or another aggregation 
> function) on a windowed stream will pre-aggregate the result value as 
> elements are added to the window, keeping the size of window constant. On the 
> other hand, the fold function will accumulate elements into the window and 
> wait until the window is fired before computing the aggregation. Does this 
> sound correct?
> 
> On Thu, Nov 19, 2015 at 1:27 PM, Stephan Ewen <se...@apache.org> wrote:
> Hi Ron!
> 
> Yes, we had to change a few things in the API between 0.9 and 0.10. The API 
> in 0.9 had quite a few problems. This one now looks good, we are confident 
> that it will stay.
> 
> Greetings,
> Stephan
> 
> 
> On Thu, Nov 19, 2015 at 8:15 PM, Ron Crocker <rcroc...@newrelic.com> wrote:
> Thanks Stephan, that helps quite a bit. Looks like another one of those API 
> changes that I'll be struggling with for a little bit.
> 
> On Thu, Nov 19, 2015 at 10:40 AM, Stephan Ewen <se...@apache.org> wrote:
> Hi Ron!
> 
> You are right, there is a copy/paste error in the docs, it should be a 
> FoldFunction that is passed to fold(), not a ReduceFunction.
> 
> In Flink-0.10, the FoldFunction is only available on
> 
>   - KeyedStream 
> (https://ci.apache.org/projects/flink/flink-docs-release-0.10/api/java/org/apache/flink/streaming/api/datastream/KeyedStream.html#fold(R,%20org.apache.flink.api.common.functions.FoldFunction))
> 
>   - WindowedStream 
> (https://ci.apache.org/projects/flink/flink-docs-release-0.10/api/java/org/apache/flink/streaming/api/datastream/WindowedStream.html#fold(R,%20org.apache.flink.api.common.functions.FoldFunction,%20org.apache.flink.api.common.typeinfo.TypeInformation))
> 
> In most cases, you probably want the variant on the WindowedStream, if you 
> aggregate values over time.
> 
> --------------------------------------------------------
> 
> To the difference between fold() and reduce(): It is very subtle. The fold 
> function can also convert to another type whenever it integrates a new 
> element.
> 
> Here is an example (with lists, not streams, but same principle).
> 
> --------------------------------------------------------
> 
> ReduceFunction<Integer> {
> 
>   public Integer reduce(Integer a, Integer b) { return a + b; }
> }
> 
> [1, 2, 3, 4, 5] -> reduce()  means: ((((1 + 2) + 3) + 4) + 5) = 15
> 
> --------------------------------------------------------
> 
> FoldFunction<String, Integer> {
> 
>   public String fold(String current, Integer i) { return current + 
> String.valueOf(i); }
> }
> 
> [1, 2, 3, 4, 5] -> fold("start-")  means: ((((("start-" + 1) + 2) + 3) + 4) + 
> 5) = "start-12345" (as a String)
> 
> 
> I hope that example illustrates the difference.
> 
> 
> Greetings,
> Stephan
> 
> 
> On Thu, Nov 19, 2015 at 7:00 PM, Ron Crocker <rcroc...@newrelic.com> wrote:
> Hi Fabian -
> 
> Thanks Fabian, that is a helpful description. 
> 
> That document WAS my source of information and it seems to also be the source 
> of my confusion. Further, it appears to be wrong - there is a 
> FoldFunction<O,T> 
> (https://ci.apache.org/projects/flink/flink-docs-release-0.10/api/java/org/apache/flink/api/common/functions/FoldFunction.html)
>  that should be passed into fold()?  
> 
> Separate note: fold() doesn't appear in the javadocs for 0.10.0 DataStream 
> (see 
> https://ci.apache.org/projects/flink/flink-docs-release-0.10/api/java/org/apache/flink/streaming/api/datastream/DataStream.html).
>  So this made me look in the freshly-downloaded flink-streaming-java:0.10.0 
> and fold() does not appear in 
> org.apache.flink.streaming.api.datastream.DataStream either. Am I looking in 
> the wrong place for it? In 0.9.1, it's located in that same class with this 
> signature: fold(R initialValue, FoldFunction<OUT, R> folder). 
> 
> Ron 
> 
> On Wed, Nov 18, 2015 at 9:39 AM, Fabian Hueske <fhue...@gmail.com> wrote:
> Hi Ron,
> 
> Have you checked: 
> https://ci.apache.org/projects/flink/flink-docs-release-0.10/apis/streaming_guide.html#transformations?
> 
> Fold is like reduce, except that you define a start element (of a different 
> type than the input type) and the result type is the type of the initial 
> value. In reduce, the result type must be identical to the input type.
> 
> Best, Fabian
> 
> 2015-11-18 18:32 GMT+01:00 Ron Crocker <rcroc...@newrelic.com>:
> Is there a succinct description of the distinction between these transforms?
> 
> -- 
> Ron Crocker
> Principal Software Engineer
> ( ( •)) New Relic
> rcroc...@newrelic.com
> M: +1 630 363 8835
> 
> 
> 
> 
> -- 
> Ron Crocker
> Principal Software Engineer
> ( ( •)) New Relic
> rcroc...@newrelic.com
> M: +1 630 363 8835
> 
> 

Reply via email to