我正在Beam中实现标准偏差计算转换。 我首先创建一个累加器,然后添加元素(输入)
class Standard_deviation(apache_beam.DoFn):
def create_accumulator(self):
return (0.0, 0.0, 0)
def add_input(self, sum_count, input):
(sum, sumsq, count) = sum_count
return sum + input, sumsq + input*input, count + 1
在我的选项中,我将运行程序设置为SparkRunner
,以便它在群集上分布式运行。
我在文档中看到,对于MeanCombineFn
,将执行累加器的合并:
def merge_accumulators(self, accumulators):
sums, counts = zip(*accumulators)
return sum(sums), sum(counts)
这是否意味着为每个节点创建累加器,并且合并功能正在创建全局累加器?否则为什么需要合并?