gpt4 book ai didi

java - Hadoop map reduce over totient sum

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

我很难使用 Hadoop map reduce 来计算两个值之间的总和。

例如,我想计算 [1, 15000] 的总和。但据我所知,map-reduce 处理具有共同点(标签)的数据。

我设法理解了该数据的架构:

doctor  23
doodle 34
doctor 2
doodle 5

那些是在给定文本中找到的单词的出现。

使用 map reduce 将链接给定单词的值,如下所示:

doctor [(23 2)]
doodle [(34 5)]

然后计算这些值的总和。

但是关于总和,我们从来没有像上面例子中的绳索那样的共同点。鉴于该数据集:

DS1: 1 2 3 4 5 ..... 15000

是否可以使用 map reduce 架构计算列表中所有 totient 的总和?

最佳答案

如果您在文本文件中有数字,用空格分隔,您可以将它们拆分并在映射器中求和,如下所示:

映射器:

public class SumMapper extends Mapper<LongWritable, Text, NullWritable, IntWritable> {
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
int sum = Arrays.stream(value.toString().split(" ")).mapToInt(Integer::valueOf).sum();
context.write(NullWritable.get(), new IntWritable(sum));
}
}

作业控制:

public class LocalMapReduceRunner {

public static void main(String[] args) throws Exception {
Runtime.getRuntime().exec("rm -rf " + args[1]);

Job job = Job.getInstance(new Configuration());

job.setJobName("MR_runner");
job.setJarByClass(LocalMapReduceRunner.class);

job.setMapperClass(SumMapper.class);
job.setMapOutputKeyClass(NullWritable.class);
job.setOutputValueClass(IntWritable.class);

FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));

System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}

感谢@cricket_007 的建议。

关于java - Hadoop map reduce over totient sum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49592330/

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