gpt4 book ai didi

java - Hadoop map-reduce 编程

转载 作者:可可西里 更新时间:2023-11-01 16:32:48 24 4
gpt4 key购买 nike

我是 Hadoop Map-reduce 的新手。我的输入是许多文本文件,我想编写 map-reduce 程序,这样它将在一个输出文件中写入所有文件名和与文件名相关的句子,其中我只想从映射器发出文件名(键)和关联的句子(值),缩减器将收集键和所有值,并在输出中写入文件名及其关联的句子。

映射器和缩减器:

public void map(Text key, Text value,
OutputCollector<Text, Text> output,
Reporter reporter) throws IOException {
StringTokenizer itr = new StringTokenizer(value.toString(), ",");
String filename = new String();
FileSplit filesplit = (FileSplit) reporter.getInputSplit();
filename = filesplit.getpath().getName();
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
output.collect(new Text(filename), word);
}
}

public void reduce(Text key, Iterator<Text> values,
OutputCollector<Text, Text> output,
Reporter reporter) throws IOException {
// int sum = 0;
String translation = "";
while (values.hasNext()) {
translation += "|" + values.toString() + "|";
}

results.set(translation);
output.collect(key, results);
}

当我使用相同的输入格式 (keyvaluetextinputformat.class) 配置运行上述映射器和缩减器时,它不会在输出中写入任何内容。

我应该改变什么来实现我的目标?

最佳答案

在您的 reduce 方法中,您将值声明为迭代器。它应该被声明为一个 Iterable 而不是。

public void reduce(Text key, Iterable<Text> values, ....

代替

public void reduce(Text key, Iterator<Text> values, ....

完成后,您可以:

Iterator<Text> iter = values.iterator();
while(iter.hasNext())
{
translation += "|" + iter.next().toString() + "|";
}

因为您使用了错误的类型,该方法没有覆盖不执行任何操作的默认 reduce 方法。这就是您没有输出的原因。

我也没有看到您在哪里声明变量结果。

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

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