gpt4 book ai didi

java - 运行本地hadoop map-reduce不会按预期对数据进行分区

转载 作者:行者123 更新时间:2023-12-02 21:03:34 25 4
gpt4 key购买 nike

我有一个map-reduce程序,可以计算每十年Google ngrams中出现的双字母组的数量。
我的分区器是:

public static class PartitionerClass extends Partitioner<Bigram, IntWritable> {
public int getPartition(Bigram key, IntWritable value, int numPartitions) {
String combined=key.getFirst().toString()+key.getSecond().toString()+key.getDecade().toString();
return combined.hashCode()%numPartitions;
}
}

我添加了一个断点,但是该程序未通过该段代码。
我的主要:
Configuration conf = new Configuration();
Job job = new Job(conf, "first join");
job.setJarByClass(WordCount.class);
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);
job.setPartitionerClass(PartitionerClass.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1])); ///SHOULD BE DECIDED
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
job.setMapOutputKeyClass(Bigram.class);
job.setMapOutputValueClass(IntWritable.class);
System.exit(job.waitForCompletion(true) ? 0 : 1);

代码未按预期运行,某些数据已正确处理,而某些数据未正确处理。
我真的不知道该如何调试。
有任何想法吗?

最佳答案

根据给定的分区数量,分区程序定义将哪个键分配给哪个分区。它的工作不是设置分区的数量,而是设置其内容。然后,每个缩减任务将处理一个分区,因此最后,分区数=缩减任务数=输出文件数(正在使用默认设置,而不是MultipleOutputs)。

为了设置分区数,您应该使用:
job.setNumReduceTasks(n);,其中n是您想要的数字。

有关如何设置此数字的说明(经验法则,无严格要求),您可以阅读this post

关于java - 运行本地hadoop map-reduce不会按预期对数据进行分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42540627/

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