2

我想知道在 apache spark 流中调用 reduceByKey 时是否保证了流中记录的顺序。基本上我所做的计算的一部分必须得到最后一个值。

这是一个例子:

JavaPairDStream< String, Double >  pairs; // ...
pairs.reduceByKey( new Function2<Double, Double, Double>() { 
            @Override public Double call(Double first, Double second) throws Exception { 
                return second;
            } 
        });
4

1 回答 1

2

不,不是。Map Reduce 的目的是使任务并行化,并且在并行化时您不能保证顺序。之前的结果可能会在到达 reduce 处理器的过程中被打乱。请注意,reduce 处理器不会等待所有结果到达,他只是抓取两个值并开始减少。

创建后,分布式数据集 (distData) 可以并行操作。例如,我们可以调用 distData.reduce((a, b) => a + b) 来将数组的元素相加。

于 2014-11-19T16:33:34.643 回答