gpt4 book ai didi

java - hadoop NaturalKeyGroupingComparator - Reducer 中发生了什么?

转载 作者:可可西里 更新时间:2023-11-01 15:06:20 25 4
gpt4 key购买 nike

我目前正在从事一个 Java EMR 项目,我的 key 由 2 个文本组成。我在其中一个步骤中设置了 NaturalKeyGroupingComparator 以仅比较键的左侧部分。

现在这是 Reducer 的 Java 代码:

     public void reduce(Pair key, Iterable<Data> values, Context context) throws IOException,  InterruptedException{

int totalOccurrences=0;
for (Data value : values){

if (key.getRight().toString().equals("*")){
totalOccurrences+=value.getOccurrences();
}
else{
value.setCount(new IntWritable(totalOccurrences));
}
}

}

现在一切都按计划完美运行,但我不明白究竟发生了什么。如何在reduce运行中途改变key?

最佳答案

你的问题是一个很好的初学者问题:)

我已经写过here .

我想最重要的是要记住 Iterable 不受集合支持,它是在调用 next() 方法时即时计算的。请记住这一点。

一旦你完成了上面的帖子,如果你想看到代码类型的人。

//行号157

 if (hasMore) {
nextKey = input.getKey();
nextKeyIsSame = comparator.compare(currentRawKey.getBytes(), 0,
currentRawKey.getLength(),
nextKey.getData(),
nextKey.getPosition(),
nextKey.getLength() - nextKey.getPosition()
) == 0;
} else {
nextKeyIsSame = false;
}

这是来自 ReduceContextImpl 的片段

该方法每次都会被调用,您调用 next(),它主要检查底层流中的键是否发生变化,如果没有,它只是将下一个值传递给您(记住键是有序的),否则它会安排调用reducer 方法再次使用新的键和可迭代的。

底层流始终是键、值对,ReducerContextImpl 给您一种错觉/抽象,它是键、集合对。

就像我一开始说的......

要记住的最重要的事情是 Iterable 不受集合支持,它是在调用 next() 方法时即时计算的。请记住这一点。

这个主题在 MapReduce 框架中很常见,所有计算都是在流上完成的,没有任何东西完全加载到内存中,我花了一段时间才明白这一点 :) 因此渴望分享它。

关于java - hadoop NaturalKeyGroupingComparator - Reducer 中发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23632704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com