Java 在hadoop中,如何获取值中的最后一个元素

Java 在hadoop中,如何获取值中的最后一个元素,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,以下是.csv中的一些输入数据,例如: url1 a URL2B URL3c URL4d URL5e url1 k url1小时 url2 x url5米 我想要的是: url1小时 url2 x URL3c URL4d url5米 输出,, 但我得到的是: url1 a URL2B URL3c URL4d URL5e 我不知道我的代码出了什么问题,下面是我程序的一些代码: 功能图: public class MergeUrlMapper extends MapReduceBase

以下是.csv中的一些输入数据,例如:

  • url1 a
  • URL2B
  • URL3c
  • URL4d
  • URL5e
  • url1 k
  • url1小时
  • url2 x
  • url5米
我想要的是:

  • url1小时
  • url2 x
  • URL3c
  • URL4d
  • url5米
输出,, 但我得到的是:

  • url1 a
  • URL2B
  • URL3c
  • URL4d
  • URL5e
我不知道我的代码出了什么问题,下面是我程序的一些代码:

功能图:

 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]));
}
}
公共类MergeUrlMapper扩展MapReduceBase实现Mapper{
公共void映射(LongWritable键、文本值、OutputCollector输出、Reporter报告器)引发IOException{
字符串valueString=value.toString();
字符串[]UrlHtmlData=valueString.split(“,”);
collect(新文本(UrlHtmlData[0])、新文本(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);
}
}
公共类MergeUrlReducer扩展MapReduceBase实现Reducer{
公共void reduce(Text t_键、迭代器值、OutputCollector输出、Reporter报告器)引发IOException{
文本键=t_键;
//如果值为空,则输出为(t_键,t_键)
Text latestHtml=t_键;
while(values.hasNext()){
Text temp=values.next();
latestHtml=温度;
}
collect(key,latestHtml);
}
}

我的代码有什么问题,输出应该是最后一个值,但实际上它是第一个值。提前谢谢

不能保证值的顺序

如果要按照某种顺序对它们进行排序,则需要将所有迭代器值添加到Arraylist中,然后使用自定义比较器对其调用
Collections.sort

然后在
list.size()-1处获取元素



此外,根据您的问题,您的输入不包含逗号,因此请确保使用正确的字符进行拆分

哦,是的,谢谢你提醒我,值的顺序是不保证的,我没有想过。至于没有逗号的问题,正如我在问题描述中提到的,我把输入数据放在.csv中,所以这不是一个问题。非常感谢,伙计。我的观点是
url1 a
没有逗号。。。CSV扩展并不重要