Вот некоторые входные данные в .csv, например:
- url1 a
- url2 b
- url3 c
- url4 d
- url5 e
- url1 k
- url1 h
- url2 x
- url5 м
и что яхочу:
- url1 ч
- url2 x
- url3 c
- url4 d
- url5 m
для вывода, но я получил:
- url1 a
- url2 b
- url3 c
- url4 d
- url5 e
Я не знаю, что не так с моим кодом, и вот некоторый код моей программы:
карта функций:
public class MergeUrlMapper extends MapReduceBase implements Mapper<LongWritable, Text, Text, Text> {
public void map(LongWritable key, Text value, OutputCollector<Text, Text> output, Reporter reporter) throws IOException {
String valueString = value.toString();
String[] UrlHtmlData = valueString.split(",");
output.collect(new Text(UrlHtmlData[0]), new Text(UrlHtmlData[1]));
}
}
и функция Reduce:
public class MergeUrlReducer extends MapReduceBase implements Reducer<Text, Text, Text, Text> {
public void reduce(Text t_key, Iterator<Text> values, OutputCollector<Text,Text> output, Reporter reporter) throws IOException {
Text key = t_key;
// if values is empty,then output will be (t_key,t_key)
Text latestHtml = t_key;
while (values.hasNext()) {
Text temp = values.next();
latestHtml = temp;
}
output.collect(key, latestHtml);
}
}
Что не так с моим кодом, вывод должен быть последним значением, но на самом деле это первое значение.Заранее спасибо!