gpt4 book ai didi

java - map 上的条件减少计数器以控制 map 输出

转载 作者:行者123 更新时间:2023-12-02 22:01:16 26 4
gpt4 key购买 nike

有没有机会在映射器级别控制映射器输出的用户定义的Java计数器上设置条件?

       Long l = context.getCounter(Counters.COUNT).getValue();

if(5L >= l) {
context.getCounter(Counters.COUNT).increment(1);
context.write((LongWritable)key, value);
} else {
System.out.println("MAP ELSE");
return;
}

得到更多然后五个记录输入到 reducer 。
有没有机会控制这个。???

最佳答案

您不能这样做,如果您的输入文件有3个拆分,那么您将运行3个映射器。每个映射器将具有其单独的计数值(取决于逻辑如何增加计数值),并且只有在所有映射器在混洗阶段之后完成后,才能在缩减方面知道。

如果要限制 map 输出。然后只有一个reducer job.setNumReduceTasks(1)并限制来自reducer的输出。这样的事情。

public static class WLReducer2 extends
Reducer<IntWritable, Text, Text, IntWritable> {
int count=0;
@Override
protected void reduce(IntWritable key, Iterable<Text> values,
Context context) throws IOException, InterruptedException {

for (Text x : values) {
if (count < 5)
context.write(key, x);
count++;
}

};
}

如果您想在减少端获得计数器值。您可以将其添加到reduce设置方法中。
 @Override
public void setup(Context context) throws IOException, InterruptedException{
Configuration conf = context.getConfiguration();
Cluster cluster = new Cluster(conf);
Job currentJob = cluster.getJob(context.getJobID());
mapperCounter = currentJob.getCounters().findCounter(COUNTER_NAME).getValue();
}

关于java - map 上的条件减少计数器以控制 map 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33013165/

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