stream reduce 执行源码简易分析

Posted 芬尼拔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stream reduce 执行源码简易分析相关的知识,希望对你有一定的参考价值。

stream reduce 执行源码简易分析

stream 分为中间操作和最终操作两种,而最终操作只会执行一次,且中间操作执行延迟到最终操作执行时。

stream reduce为规约操作API:

 

 

 

由参数BinaryOperator类泛型特性:1和2reduce规约针对的是一种类型的规约,初始值,集合,规约后的值参数必须一致:

 

 

 

3接口:初始值U的类型与集合元素类型可以不一致,combiner 参数在并行(parallel)操作中组合accumulator计算结果,且combiner需要兼容accumulator,不然并行计算结果有误。

 

 

 

 从源码上看,自定义的部分在下图方法中定义:

 

 

 1为初始值赋值,2为accumulator计算,3为combiner计算,从代码中可以看到1,2,3规约到state变量中。计算逻辑和初始数据封装在ReducingSink对象中:

 

 

 

 

 回到:

 

 evaluate方法根据串并行分别执行各自的逻辑:

 

 在串行逻辑中分别执行了state初始化赋值和accumulator计算,但是没有执行combiner操作,所以combiner对串行操作无效。

 

 并行操作有代理方式执行:底层为forkjoin处理并行的计算:

 

 

 

以上是关于stream reduce 执行源码简易分析的主要内容,如果未能解决你的问题,请参考以下文章

Stream 源码分析(串行流)

Spark Streaming 数据接收过程

《简易新闻》源码分析

《简易新闻》源码分析

red5源码分析---12

Flink Streaming Python API - reduce() 产生增量结果而不是最终值