例如,以下是.csv中的一些输入数据:
我想要的是:
输出
但是我得到的是:
我不知道我的代码有什么问题,这是我程序的一些代码:
功能图:
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]));
}
}
和功能减少:
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);
}
}
我的代码出了什么问题,输出应该是最后一个值,但实际上它是第一个值。提前致谢!
最佳答案
不能保证值的顺序。
如果要按某种顺序对它们进行排序,则需要将所有迭代器值添加到Arraylist中,然后根据需要使用自定义Comparator在其上调用Collections.sort
。
然后在list.size() - 1
处获取元素
另外,根据您的问题,您输入的内容不包含逗号,因此请确保您使用的字符正确。