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 >