gpt4 book ai didi

java - 如何访问输出阶段的 Mapper/Reducer 计数器?

转载 作者:行者123 更新时间:2023-11-29 08:52:22 26 4
gpt4 key购买 nike

我在 Mapper 类中创建了一些计数器:

(使用 appengine-mapreduce Java 库 v.0.5 编写的示例)

@Override
public void map(Entity entity) {
getContext().incrementCounter("analyzed");
if (isSpecial(entity)){
getContext().incrementCounter("special");
}
}

(isSpecial 方法只返回truefalse 取决于实体的状态,与问题无关)

我想在处理完所有内容后访问这些计数器,在 Output 类的 finish 方法中:

@Override
public Summary finish(Collection<? extends OutputWriter<Entity>> writers) {
//get the counters and save/return the summary
int analyzed = 0; //getCounter("analyzed");
int special = 0; //getCounter("special");
Summary summary = new Summary(analyzed, special);
save(summary);
return summary;
}

... 但是方法 getCounter 只能从 MapperContext 中获得类,只能通过 Mappers/Reducers getContext() 方法访问。

如何在输出阶段访问我的计数器?

旁注:我无法将计数器值发送到我的输出类,因为整个 Map/Reduce 是关于将一​​组实体转换为另一组实体(换句话说:计数器不是 Map/减少)。计数器仅用于控制 - 我在这里计算它们而不是创建另一个进程来进行计数是有意义的。

谢谢。

最佳答案

今天没有办法在输出内部执行此操作。但请随时在这里提出要求: https://code.google.com/p/appengine-mapreduce/issues/list

然而,您可以做的是链接一个作业以在您的 map-reduce 之后运行,它将接收它的输出和计数器。这里有一个例子: https://code.google.com/p/appengine-mapreduce/source/browse/trunk/java/example/src/com/google/appengine/demos/mapreduce/entitycount/ChainedMapReduceJob.java

在上面的示例中,它连续运行了 3 个 MapReduce 作业。请注意,这些作业不一定是 MapReduce 作业,您可以创建自己的类来扩展 Job 并具有创建摘要对象的 run 方法。

关于java - 如何访问输出阶段的 Mapper/Reducer 计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22137485/

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