我想知道如果在apache spark streaming中调用reduceByKey时,流中的记录顺序是保证的。基本上我计算的一部分必须得到最后一个值。
以下是一个例子:
JavaPairDStream< String, Double > pairs; // ...
pairs.reduceByKey( new Function2<Double, Double, Double>() {
@Override public Double call(Double first, Double second) throws Exception {
return second;
}
});
答案 0 :(得分:2)
不,不是。 Map Reduce的目的是平行化任务,当平行时你不能保证秩序。之前的结果可能会在去往reduce处理器的途中被洗牌。请注意,reduce处理器不会等待所有结果到达,他只是抓取两个值并开始减少。
创建后,可以并行操作分布式数据集(distData)。例如,我们可以调用distData.reduce((a,b)=&gt; a + b)来添加数组的元素。